2
我有一个意外的问题绑定到枚举列表。绑定默默失败,我无法解释为什么。WPF:无法绑定DataGrid枚举列表
该代码应该做的是创建一个DataGrid,其中单元格模板作为组合框填充了枚举选项,并将所选项目设置为列表元素。
这种方法适用于其他地方,对于具有enum元素作为其.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属性。 – vorrtex 2011-03-23 22:46:42
感谢您的回复。转换器似乎不是问题 - 两个方向都实现了,但是对于这个特殊的组合框没有被调用。正如我所说,这个确切的结构在其他地方有效,我使用了完全相同的转换器类实例。 – dythim 2011-03-23 23:37:41
无论如何,问题出在SelectedIndex及其绑定上。它绑定到数据网格所有列的单个对象。第一个xaml有什么问题? – vorrtex 2011-03-24 09:30:38