在WPF / MVVMLight中AutoGenerateColumns = false时,枚举DataGridComboBoxColumn为空

时间:2014-07-03 03:50:56

标签: c# .net wpf mvvm-light wpfdatagrid

使用WPF开发MVVLight应用。

在我的模特中,我有:

..名为enum的{​​{1}}:

AttributeType

.. public enum AttributeType { TypeA = 0, TypeB = 1, } 类,它公开Attribute类型的Type属性:

AttributeType

..以及public class Attribute : ObservableObject { //constructors, other fields etc omitted for brevity private AttributeType type; public AttributeType Type { get { return type; } set { type = value; RaisePropertyChanged(() => Type); } } 类,其DataSet属性类型为Attributes

List<Attribute>

在我的主窗口中,我有一个public class DataSet : ObservableObject { //constructors, other fields etc omitted for brevity private ObservableCollection<Attribute> attributes; public ObservableCollection<Attribute> Attributes { get { return attributes; } set { attributes = value; RaisePropertyChanged(() => Attributes); } } } ,该DataGrid与[{1}}绑定,并且DataSet.AttributesAutoGenerateColumns="true",如下所示:

<DataGrid Grid.Row="2" Grid.Column="0" Margin="5" CanUserAddRows="false" AutoGenerateColumns="true" ItemsSource="{Binding DataSet.Attributes}">

每当我通过DataSet实例化ViewModel课程并填充DataSet.AttributesDataGrid正确显示DataGridComboBoxColumn Attribute.Type所有可能的AttributeType枚举值。

但是,如果我转AutoGenerateColumns="false"设置我自己的列:

<DataGrid Grid.Row="2" Grid.Column="0" Margin="5" CanUserAddRows="false" AutoGenerateColumns="false" ItemsSource="{Binding DataSet.Attributes}">
     <DataGrid.Columns>
          <DataGridTextColumn Header="name" Width="*" Binding="{Binding Name}" />
          <DataGridComboBoxColumn Header="type" Width="*" SelectedItemBinding="{Binding Type}" />
     </DataGrid.Columns>
</DataGrid>

.. DataGridComboBoxColumn这次没有显示任何内容。其他列及其相应的绑定工作正常。我在这里错过了什么?

1 个答案:

答案 0 :(得分:2)

请使用以下步骤。它工作正常(经过测试)。

<强> 1。将资源添加到数据网格(或更高级别)。

        <DataGrid.Resources>
            <!--Create list of enumeration values-->
            <ObjectDataProvider x:Key="myEnum" MethodName="GetValues" ObjectType="{x:Type System:Enum}">
                <ObjectDataProvider.MethodParameters>
                    <x:Type Type="local:AttributeType"/>
                </ObjectDataProvider.MethodParameters>
            </ObjectDataProvider>
        </DataGrid.Resources>

<强> 2。更新DataGridComboBoxColumn的绑定。需要静态资源来解析枚举成员。请参阅步骤1中的MethodName,它返回绑定对象类型的值。

        <DataGrid.Columns>
            <DataGridComboBoxColumn Header="Value" ItemsSource="{Binding Source={StaticResource myEnum}}" Width="100"
            SelectedValueBinding="{Binding Type}" />
        </DataGrid.Columns>

更新1

您还需要在Main容器级别定义本地命名空间。将WpfApplication1替换为您的命名空间路径。

  xmlns:System="clr-namespace:System;assembly=mscorlib" 
xmlns:local="clr-namespace:WpfApplication1"