在我的
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; }
}
你必须从上面思考并阅读你正在做的事情。
column.ItemsSource = elements;
这会将您的列项目源设置为元素列表。
column.DisplayMemberPath = "Text";
它不是 Element 的成员,因此不会显示任何内容。您应该将 column.ItemsSource 设置为:
column.ItemsSource = elements[i].ComboItems
“i”是你想要展示的元素。
如果你想显示文本,你应该:
column.DisplayMemberPath = "Text";
如果您想要 ID,则只需:
column.DisplayMemberPath = "ID";
我在没有任何编辑的情况下写了这篇文章,我认为这接近你想要的答案,如果我错了评论,我会尝试以更准确的方式回答。
似乎从
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;
}
您可以使用以下示例:
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);