【发布时间】:2018-01-22 20:47:22
【问题描述】:
我有一个数据网格,我将项目源设置为 List<User>。
User 的属性之一是Department,它是带有描述的枚举。
在数据网格中,部门显示为组合框,供用户选择。
我需要将枚举值和描述绑定到DataGridComboBoxColumn。
到目前为止,我设法将 Enum 绑定到 DataGridComboBoxColumn.ItemsSource,因此它可以工作,但没有考虑到描述。
或者将 Value、Description 的集合设置为 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();
}
}
【问题讨论】:
-
我在这里link问过类似的问题,希望对你有帮助
-
@stuicidle .SelectedValueBinding = ComboBoxSelectedItem 中的 ComboBoxSelectedItem 是什么? (描述、值的集合)?
-
在示例中它是一个 ComboBoxOption 对象,当您从组合框中进行选择时会更新它
-
我已经更新了我的帖子,希望如果您仍然有困难,它会更有意义:)
标签: c# wpf data-binding wpfdatagrid datagridcomboboxcolumn