WPF:无法将DataGrid绑定到枚举列表

时间:2011-03-23 22:28:19

标签: wpf templates data-binding datagrid enums

我遇到一个意外的问题,绑定到枚举列表。绑定默默地失败了,我无法解释原因。

此代码应该做的是创建一个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>

只是一些注释:

  1. local:Enumeration是一个标记扩展,它只是将枚举元素的描述作为列表提供。
  2. 提前致谢。

1 个答案:

答案 0 :(得分:0)

绑定集合的项目将复制到单元格的DataContext中。您可以对DataContext引用的对象的属性使用双向绑定,因为您实际上正在更改绑定集合引用的同一对象(即{Binding Path = Value,Mode = TwoWay}将起作用)。

在第二个示例中,您正在尝试更改DataContext引用的对象,但WPF中没有任何工具可以“更新”绑定集合。

基本上,您只能更改DataContext引用的对象的状态。您不能更改它引用的对象或绑定集合。