【发布时间】:2011-03-23 22:28:19
【问题描述】:
我在绑定到枚举列表时遇到了意外问题。绑定静默失败,我不知道为什么。
这段代码应该做的是创建一个 DataGrid,将单元格模板作为一个组合框,其中填充了枚举选项,并将所选项目设置为列表元素。
这种方法在其他地方也可以很好地工作,对于具有枚举元素作为其 .Value 属性的对象的可观察集合。它似乎只是不喜欢枚举元素的可观察集合。
明确地说,这里有一些示例类:
public enum EquipmentEnum { EquipmentA, EquipmentB, EquipmentC }
public class EquipmentClass { public EquipmentEnum Value { get; set; } }
这有效:
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding equipmentClassList}"> <!-- ObservableCollection<EquipmentClass> -->
<DataGrid.Columns>
<DataGridTemplateColumn Header="Equipment Used" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={local:Enumeration {x:Type EquipmentEnum}}}"
SelectedIndex="{Binding Path=Value Converter={StaticResource convertEnumValueToIndex}, Mode=TwoWay}"
DisplayMemberPath="Description"
IsEditable="True" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
这行不通:
<DataGrid AutoGenerateColumns="False"
ItemsSource="{Binding equipmentEnumList}"> <!-- ObservableCollection<EquipmentEnum> -->
<DataGrid.Columns>
<DataGridTemplateColumn Header="Equipment Used" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={local:Enumeration {x:Type EquipmentEnum}}}"
SelectedIndex="{Binding Converter={StaticResource convertEnumValueToIndex}, Mode=TwoWay}"
DisplayMemberPath="Description"
IsEditable="True" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
只是一些注释:
-
local:Enumeration是一个标记扩展,它简单地将枚举元素的描述作为一个列表提供。
提前致谢。
【问题讨论】:
-
可能你没有在convertEnumValueToIndex转换器中指定convertback方法。并且 SelectedITem 属性优于 SelectedIndex 属性。
-
感谢您的回复。转换器似乎不是问题——两个方向都实现了,但对于这个特定的组合框根本没有调用。正如我所说,这种确切的结构在其他地方也适用,我使用完全相同的转换器类实例。
-
无论如何,问题出在 SelectedIndex 及其绑定中。它绑定到对数据网格的所有列都是单一的完整对象。第一个 xaml 有什么问题?
标签: wpf templates data-binding datagrid enums