我遇到一个意外的问题,绑定到枚举列表。绑定默默地失败了,我无法解释原因。
此代码应该做的是创建一个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
是一个标记扩展,它只是将枚举元素的描述作为列表提供。 提前致谢。
答案 0 :(得分:0)
绑定集合的项目将复制到单元格的DataContext中。您可以对DataContext引用的对象的属性使用双向绑定,因为您实际上正在更改绑定集合引用的同一对象(即{Binding Path = Value,Mode = TwoWay}将起作用)。
在第二个示例中,您正在尝试更改DataContext引用的对象,但WPF中没有任何工具可以“更新”绑定集合。
基本上,您只能更改DataContext引用的对象的状态。您不能更改它引用的对象或绑定集合。