Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以编程方式绑定组合框时,组合框失去焦点后,WPF DataGridComboxColumn DisplayMember将重置为类名_C#_Wpf - Fatal编程技术网

C# 以编程方式绑定组合框时,组合框失去焦点后,WPF DataGridComboxColumn DisplayMember将重置为类名

C# 以编程方式绑定组合框时,组合框失去焦点后,WPF DataGridComboxColumn DisplayMember将重置为类名,c#,wpf,C#,Wpf,这是回答我自己的问题 在WPF中,我以编程方式创建了DataGridComboxColumn,并将其绑定到对象的ObservableCollection,并将DisplayMemberPath设置为对象属性之一。当组合框下拉列表打开时,DisplayMember按预期工作,我看到了属性。但是当组合框失去焦点而没有看到组合框中的属性值时,我会看到类名,例如“{namespace1.Warehouses}”,而不是“Warehouse A” 问题代码(简化/修改): 数据网格项目代码 public

这是回答我自己的问题

在WPF中,我以编程方式创建了DataGridComboxColumn,并将其绑定到对象的ObservableCollection,并将DisplayMemberPath设置为对象属性之一。当组合框下拉列表打开时,DisplayMember按预期工作,我看到了属性。但是当组合框失去焦点而没有看到组合框中的属性值时,我会看到类名,例如“{namespace1.Warehouses}”,而不是“Warehouse A”

问题代码(简化/修改):

数据网格项目代码

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项“仓库”对象。