C# 以编程方式绑定组合框时,组合框失去焦点后,WPF DataGridComboxColumn DisplayMember将重置为类名
这是回答我自己的问题 在WPF中,我以编程方式创建了DataGridComboxColumn,并将其绑定到对象的ObservableCollection,并将DisplayMemberPath设置为对象属性之一。当组合框下拉列表打开时,DisplayMember按预期工作,我看到了属性。但是当组合框失去焦点而没有看到组合框中的属性值时,我会看到类名,例如“{namespace1.Warehouses}”,而不是“Warehouse A” 问题代码(简化/修改): 数据网格项目代码C# 以编程方式绑定组合框时,组合框失去焦点后,WPF DataGridComboxColumn DisplayMember将重置为类名,c#,wpf,C#,Wpf,这是回答我自己的问题 在WPF中,我以编程方式创建了DataGridComboxColumn,并将其绑定到对象的ObservableCollection,并将DisplayMemberPath设置为对象属性之一。当组合框下拉列表打开时,DisplayMember按预期工作,我看到了属性。但是当组合框失去焦点而没有看到组合框中的属性值时,我会看到类名,例如“{namespace1.Warehouses}”,而不是“Warehouse A” 问题代码(简化/修改): 数据网格项目代码 public
public class Item{
public Item(){}
private Warehouse itemWarehouse;
public Warehouse Item_Warehouse{
get{ return itemWarehouse; }
set{ itemWarehouse=value; }
}
}
仓库类
public class Warehouse{
private string label;
public Warehouse (string theLabel){
label=theLabel;
}
public string Label{
get{ return label; }
set{ label=value; }
}
}
在xaml.cs中,使用此代码将导致Combobox显示重置为类名,而不是Warehouse.Label,就像关闭Combobox后一样
DataGridComboBoxColumn dataCBColumn = new DataGridComboBoxColumn();
//below three lines cause the problem. When programmatically setting
//DisplayMemberPath it should not be done this way
dataCBColumn.EditingElementStyle = new Style();
dataCBColumn.EditingElementStyle.TargetType = typeof(ComboBox);
dataCBColumn.EditingElementStyle.Setters.Add(new Setter(ComboBox.DisplayMemberPathProperty, "Label"));
//-------------------------------------------------------------------
dataCBColumn.ItemsSource = WareHouses; //where WareHouses is of type ObservableCollection<WareHouse>
dataCBColumn.SelectedItemBinding = new Binding("Item_Warehouse"); //this Warehouse refers to the Datagrid Item 'Warehouse' object.
datagridcomboxcolumn dataCBColumn=newdatagridcomboxcolumn();
//下面三行是导致问题的原因。当以编程方式设置
//DisplayMemberPath不应该这样做
dataCBColumn.EditingElementStyle=新样式();
dataCBColumn.EditingElementStyle.TargetType=typeof(组合框);
dataCBColumn.EditingElementStyle.Setters.Add(新Setter(ComboBox.DisplayMemberPathProperty,“标签”);
//-------------------------------------------------------------------
dataCBColumn.ItemsSource=仓库//仓库类型为ObservableCollection时
dataCBColumn.SelectedItemBinding=新绑定(“物料仓库”)//此仓库引用Datagrid项“仓库”对象。
下面是xaml.cs的正确代码
直接使用dataCBColumn.DisplayMemberPath,而不是使用元素样式进行编辑
DataGridComboBoxColumn dataCBColumn = new DataGridComboBoxColumn();
dataCBColumn.DisplayMemberPath = "Label";
dataCBColumn.ItemsSource = WareHouses; //where WareHouses is of type ObservableCollection<WareHouse>
dataCBColumn.SelectedItemBinding = new Binding("Item_Warehouse"); //this Warehouse refers to the Datagrid Item 'Warehouse' object.
datagridcomboxcolumn dataCBColumn=newdatagridcomboxcolumn();
dataCBColumn.DisplayMemberPath=“标签”;
dataCBColumn.ItemsSource=仓库//仓库类型为ObservableCollection时
dataCBColumn.SelectedItemBinding=新绑定(“物料仓库”)//此仓库引用Datagrid项“仓库”对象。