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

问题描述 投票:0回答:3

在我的

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; }
}
c# .net wpf
3个回答
1
投票

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

    column.ItemsSource = elements;

这会将您的列项目源设置为元素列表。

column.DisplayMemberPath = "Text";

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

column.ItemsSource = elements[i].ComboItems

“i”是你想要展示的元素。

如果你想显示文本,你应该:

    column.DisplayMemberPath = "Text";

如果您想要 ID,则只需:

    column.DisplayMemberPath = "ID";

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


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;
}

0
投票

您可以使用以下示例:

    ComboBox dgvCmb = new ComboBox();
    dgvCmb.Name = "Name";
    dgvCmb.Items.Add("Razali");
    dgvCmb.Items.Add("Boeing");
    dgvCmb.Items.Add("Londang");
    dgvCmb.Items.Add("MCKK");
    
    DataGridComboBoxColumn   dgc=new DataGridComboBoxColumn();
    dgc.Header = "Test";
    dgc.ItemsSource = dgvCmb.Items;
    dataGrid.Columns.Add(dgc);
© www.soinside.com 2019 - 2024. All rights reserved.