C# 当WPF/MVVMLight中的AutoGenerateColumns=false时,枚举DataGridComboBoxColumn为空

C# 当WPF/MVVMLight中的AutoGenerateColumns=false时,枚举DataGridComboBoxColumn为空,c#,.net,wpf,mvvm-light,wpfdatagrid,C#,.net,Wpf,Mvvm Light,Wpfdatagrid,使用MVVLight开发WPF应用程序 在我的模型中,我有: ..名为AttributeType的enum: public enum AttributeType { TypeA = 0, TypeB = 1, } public class Attribute : ObservableObject { //constructors, other fields etc omitted for brevity priva

使用
MVVLight
开发
WPF
应用程序

在我的模型中,我有:

..名为
AttributeType
enum

public enum AttributeType
    {
        TypeA = 0,
        TypeB = 1,
    }
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);
        }
}
…一个
属性
类,它公开类型为
属性类型
类型
属性:

public enum AttributeType
    {
        TypeA = 0,
        TypeB = 1,
    }
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);
        }
}
..和一个
数据集
类,该类具有类型为
列表
属性

每当我通过我的
ViewModel
实例化
DataSet
类并填充
DataSet.Attributes
时,
DataGrid
会正确显示
属性的
DataGridComboBoxColumn
。键入带有所有可能的
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>


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

请使用以下步骤。它运行良好(经过测试)

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>
        <DataGrid.Columns>
            <DataGridComboBoxColumn Header="Value" ItemsSource="{Binding Source={StaticResource myEnum}}" Width="100"
            SelectedValueBinding="{Binding Type}" />
        </DataGrid.Columns>

我已经添加了本地名称空间,但blend突出显示了这一点:
ObjectType=“{x:Type System:Enum}”>
并给出了以下两个错误:
名称空间前缀“System”未定义
,WPF项目中不支持
Enum
@globetrotter检查我的更新。您还需要添加系统名称空间。这似乎可以解决问题,谢谢。如果这是默认的解决方案,我觉得有点过分了。但是,当
DataGrid
上的
AutoGenerateColumns
设置为true时,它为什么知道如何解析
enum
的成员?另外,您的解决方案是否适合双向绑定?我将您的帖子标记为答案。但是仍然对上面的问题感到困惑。@globetrotter是的,我测试并更改值实际上会更改模型。关于枚举解析,我们知道,当AutoGenerateColumns设置为true时,DataGrid会自动解析枚举成员,但如果AutoGenerateColumns设置为false,ObjectDataProvider是迄今为止唯一一个看似简单的解决方案。stackoverflow中还有其他答案,但它们似乎与使用{RelativeSource Mode=FindAncestor…}实现的需求大不相同。我很高兴看到更好的答案。
  xmlns:System="clr-namespace:System;assembly=mscorlib" 
xmlns:local="clr-namespace:WpfApplication1"