在我的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; }
}
答案 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;
}