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

C# WPF以编程方式将数据网格组合框列绑定到itemsource,c#,.net,wpf,C#,.net,Wpf,在我的datagrid中,其中一列是datagridcomboxcolumn,我试图在每一行中显示不同的下拉菜单。在XAML中创建组合框而不是以编程方式创建组合框时的简单任务。我的问题是我不知道如何把它绑好。这就是我所尝试的: private DataGridComboBoxColumn CreateComboValueColumn(List<Elements> elements) { DataGridComboBoxColumn column = new DataGridC

在我的
datagrid
中,其中一列是
datagridcomboxcolumn
,我试图在每一行中显示不同的下拉菜单。在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; }
}
private DataGridComboBoxColumn CreateComboValueColumn(列表元素)
{
DataGridComboxColumn=新DataGridComboxColumn();
column.ItemsSource=元素;
column.DisplayMemberPath=“Text”;
column.SelectedValuePath=“ID”;
column.SelectedValueBinding=新绑定(“值”);
返回列;
}
公共类要素
{
公共字符串名称{get;set;}
公共字符串值{get;set;}
公共字符串注释{get;set;}
公共列表组合项{get;set;}
}
公共类组合项
{
公共字符串ID{get;set;}
公共字符串文本{get;set;}
}

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

    column.ItemsSource = elements;
将列itemssource设置为元素列表的

column.DisplayMemberPath = "Text";
它不是元素的成员,因此不会显示任何内容。您应该将column.ItemsSource设置为:

column.ItemsSource = elements[i].ComboItems
“我”是你想要展示的元素

然后,如果要显示文本,应:

    column.DisplayMemberPath = "Text";
如果您需要Id,则只需:

    column.DisplayMemberPath = "ID";

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

似乎从
样式添加绑定比直接方法效果更好。这项工作:

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;
}
private DataGridComboBoxColumn CreateComboValueColumn(列表元素)
{
DataGridComboxColumn=新DataGridComboxColumn();
样式样式=新样式(typeof(组合框));
//set itemsource={Binding ComboItems}
添加(新的Setter(ComboBox.ItemsSourceProperty,新绑定(“ComboItems”));
column.DisplayMemberPath=“Text”;
column.SelectedValuePath=“ID”;
column.SelectedValueBinding=新绑定(“值”);
column.ElementStyle=样式;
column.EditingElementStyle=样式;
返回列;
}

为什么要避免xaml?因为我有动态量的
DataGrid
SY您正确地指出
column.ItemsSource=elements[I]。ComboItems
应该可以工作。如果我知道如何告诉XML,
I=column.row
您的项目是通过XML获得的,那会是这样吗?