【问题标题】:WPF DataGridComboBoxColumn dynamic binding of EnumWPF DataGridComboBoxColumn Enum的动态绑定
【发布时间】:2018-01-22 20:47:22
【问题描述】:

我有一个数据网格,我将项目源设置为 List<User>。 User 的属性之一是Department,它是带有描述的枚举。

在数据网格中,部门显示为组合框,供用户选择。 我需要将枚举值和描述绑定到DataGridComboBoxColumn

到目前为止,我设法将 Enum 绑定到 DataGridComboBoxColumn.ItemsSource,因此它可以工作,但没有考虑到描述。 或者将 Value、Description 的集合设置为 DataGridComboBoxColumn.ItemsSource 并设置 DisplayMemberPathSelectedValuePath。但在这种情况下,该值不会绑定到 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


【解决方案1】:

SelectedValueBinding的路径应该是User类的属性名:

(e.Column as DataGridComboBoxColumn).SelectedValueBinding = new Binding("Department");

如果User 类的Department 属性的类型和ValueDescriptionVm&lt;Departments&gt; 类的Value 属性的类型相同,那么绑定应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多