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获得的,那会是这样吗?