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"