我有一个datagrid,我设置项目源List<User>
。 用户的其中一个属性是Department
,它是带有说明的Enum。WPF DataGridComboBoxColumn枚举的动态绑定
在datagrid中,Departments显示为用户选择的组合框。 我需要将枚举值和说明绑定到DataGridComboBoxColumn
。
到目前为止,我管理要么将Enum绑定到DataGridComboBoxColumn.ItemsSource
,因此它可以工作,但是不会将描述考虑在内。 或设置值的集合,描述为DataGridComboBoxColumn.ItemsSource
,并设置DisplayMemberPath
,SelectedValuePath
。但在这种情况下,该值不会绑定到DataGridComboBoxColumn。
的观点:
<DataGrid x:Name="userData" HorizontalAlignment="Stretch" Margin="10,157,10,80" VerticalAlignment="Stretch" Height="Auto" Width="Auto"
AutoGeneratingColumn="UserData_OnAutoGeneratingColumn" DisplayMemberPath="Description"/>
验证码:
private void UserData_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.Column.SortMemberPath == "Department")
{
(e.Column as DataGridComboBoxColumn).ItemsSource = EnumExtension.ProvideValue();
(e.Column as DataGridComboBoxColumn).DisplayMemberPath = "Description";
(e.Column as DataGridComboBoxColumn).SelectedValueBinding = new Binding("Value");
(e.Column as DataGridComboBoxColumn).SelectedValuePath = "Value";
}
}
枚举扩展:
public static class EnumExtension
{
public static List<ValueDescriptionVm<Departments>> ProvideValue()
{
return Enum.GetValues(typeof(Departments))
.Cast<object>()
.Select(enumValue => new ValueDescriptionVm<Departments>()
{
Value = (Departments)enumValue,
Description = GetDescription((Enum)enumValue)
}).ToList();
}
private static string GetDescription(Enum enumValue)
{
FieldInfo fi = enumValue.GetType().GetField(enumValue.ToString());
var attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attributes.Length > 0)
{
return attributes[0].Description;
}
return enumValue.ToString();
}
}
我在这里问了一个类似的问题[链接](https://stackoverflow.com/questions/45349465/wpf-datagrid-datagridcomboboxcolumn-cells-displayed-value),希望它有帮助 – stuicidle
@stuicidle什么是ComboBoxSelectedItem中。 SelectedValueBinding = ComboBoxSelectedItem? (描述,价值的集合)? –
在这个例子中,它是一个ComboBoxOption对象,当您从组合框中进行选择时会得到更新 – stuicidle