【发布时间】:2015-07-20 17:48:15
【问题描述】:
这是我的枚举:
enum Foo
{
[Description("the quick")]
Bar,
[Description("brown fox")]
Baz,
[Description("jumped over")]
Qux
}
这是我的 ViewModel 的一部分:
class MainWindowViewModel : ViewModelBase
{
public ObservableCollection<RowViewModel> Rows { get { ... } }
}
class RowViewModel : ViewModelBase
{
public String Name { get { ... } set { ... } }
public Foo Foo { get { ... } set { ... } }
}
这是我的 XAML:
<DataGrid AutoGeneratingColumn="OnAutoGeneratingColumn" ItemsSource="{Binding Path=Rows}" />
因为MainWindowViewModel.Rows[n].Foo 是一个枚举,WPF 会自动生成一个DataGridComboBoxColumn,其中枚举成员作为组合框下拉值,到目前为止一切顺利。
我希望组合框使用组合框下拉列表中的[Description("")] 值并显示。所以我实现了一个IValueConverter。然后我为OnAutoGeneratingColumn 添加了一个处理程序:
private void OnAutoGeneratingColumn(Object sender, DataGridAutoGeneratingColumnEventArgs e)
{
DataGridComboBoxColumn dgCol = e.Column as DataGridComboBoxColumn;
if( dgCol != null && e.PropertyType.IsEnum ) {
Binding binding = new Binding( e.PropertyName );
binding.Converter = EnumDescriptionValueConverter.Instance;
dgCol.TextBinding = binding;
dgCol.SelectedItemBinding = binding;
}
}
不幸的是,这不起作用:当单元格有值时,单元格显示为空,并且组合框下拉菜单包含原始枚举值而不是描述。
【问题讨论】:
标签: wpf mvvm binding datagrid combobox