使用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.Attributes
为AutoGenerateColumns="true"
,如下所示:
<DataGrid Grid.Row="2" Grid.Column="0" Margin="5" CanUserAddRows="false" AutoGenerateColumns="true" ItemsSource="{Binding DataSet.Attributes}">
每当我通过DataSet
实例化ViewModel
课程并填充DataSet.Attributes
时DataGrid
正确显示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
这次没有显示任何内容。其他列及其相应的绑定工作正常。我在这里错过了什么?
答案 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"