WPF以编程方式将数据网格组合框列绑定到itemsource

时间:2018-03-21 10:14:30

标签: c# .net wpf

在我的datagrid中,其中一列是DataGridComboBoxColumn,我试图在每一行显示不同的下拉菜单。在XAML中创建组合框而不是以编程方式执行它时的轻松任务。我的问题是我不知道如何正确绑定它。这就是我试过的:

private DataGridComboBoxColumn CreateComboValueColumn(List<Elements> elements)
{
    DataGridComboBoxColumn column = new DataGridComboBoxColumn();
    column.ItemsSource = elements;
    column.DisplayMemberPath = "Text";
    column.SelectedValuePath = "ID";
    column.SelectedValueBinding = new Binding("Value");
    return column;
}

public class Elements
{
    public string Name { get; set; }
    public string Value { get; set; }
    public string Comment { get; set; }
    public List<ComboItem> ComboItems { get; set; }
}

public class ComboItem
{
    public string ID { get; set; }
    public string Text { get; set; }
}

2 个答案:

答案 0 :(得分:1)

你必须从上面思考并阅读你正在做的事情。

    column.ItemsSource = elements;

将列itemssource设置为元素列表。

column.DisplayMemberPath = "Text";

它不是Element的成员,所以它不会显示任何内容。您应该将column.ItemsSource设置为:

column.ItemsSource = elements[i].ComboItems

成为“i”你要展示的元素。

然后,如果你想显示文字,你应该:

    column.DisplayMemberPath = "Text";

如果您想要Id,那么只需:

    column.DisplayMemberPath = "ID";

我在没有任何编辑的情况下写了这篇文章,我觉得这很接近你想要的答案,如果我错了评论这个,我会尝试以更准确的方式回答。

答案 1 :(得分:0)

似乎从style添加绑定比直接方法更有效。这有效:

private DataGridComboBoxColumn CreateComboValueColumn(List<Elements> elements)
{
    DataGridComboBoxColumn column = new DataGridComboBoxColumn();

    Style style = new Style(typeof(ComboBox));
    //set itemsource = {Binding ComboItems}
    style.Setters.Add(new Setter(ComboBox.ItemsSourceProperty, new Binding("ComboItems")));
    column.DisplayMemberPath = "Text";
    column.SelectedValuePath = "ID";
    column.SelectedValueBinding = new Binding("Value");

    column.ElementStyle = style;
    column.EditingElementStyle = style;
    return column;
}