C# combobox中基类的DisplayMember属性

C# combobox中基类的DisplayMember属性,c#,.net,combobox,C#,.net,Combobox,我使用Windows窗体。我想要基类中的DisplayMember相等属性? 我有课 public class MyViewModel { public int Id { get; set; } public Type Type { get; set; } } 我想让我的组合框显示Type.Name List<MyViewModel> list = new List<MyViewModel>(); list.Add(new MyViewModel(){

我使用Windows窗体。我想要基类中的DisplayMember相等属性? 我有课

public class MyViewModel
{
    public int Id { get; set; }
    public Type Type { get; set; }
}
我想让我的组合框显示Type.Name

List<MyViewModel> list = new List<MyViewModel>();
list.Add(new MyViewModel(){ Id = 1, Type.GetType(int)});
list.Add(new MyViewModel(){ Id = 2, Type.GetType(string)});
//how i must to config displayMember???
myComboBox.DisplayMember = "Type.Name";
myComboBox.ValueMember = "Id";
myComboBox.DataSoutce = list;
List List=新列表();
添加(新的MyViewModel(){Id=1,Type.GetType(int)});
添加(新的MyViewModel(){Id=2,Type.GetType(string)});
//我必须如何配置displayMember???
myComboBox.DisplayMember=“Type.Name”;
myComboBox.ValueMember=“Id”;
myComboBox.DataSoutce=列表;

但我无法获取组合框中显示的Type.Name。你能帮我吗?

一个
组合框中有一个用于此目的的事件,称为
格式

myComboBox.DisplayMember = "Type";//Notice this
myComboBox.Format += (s,e) => {
    e.Value = ((Type)e.Value).Name;
};

必须创建具有两个属性的新类:

class MyViewModel
{
    public string TypeName {get; set; }
    public string Id {get; set; }
}

// generate the datasource list.
List<MyViewModel> list = new List<MyViewModel>();
list.Add(new MyViewModel(){ Id = 1, TypeName = typeof(int).Name});
list.Add(new MyViewModel(){ Id = 2, TypeName = typeof(string).Name});

// how i must to config displayMember
myComboBox.DisplayMember = "TypeName";
myComboBox.ValueMember = "Id";
myComboBox.DataSoutce = list;
类MyViewModel
{
公共字符串类型名{get;set;}
公共字符串Id{get;set;}
}
//生成数据源列表。
列表=新列表();
添加(新的MyViewModel(){Id=1,TypeName=typeof(int.Name});
添加(新的MyViewModel(){Id=2,TypeName=typeof(string.Name});
//我必须如何配置displayMember
myComboBox.DisplayMember=“TypeName”;
myComboBox.ValueMember=“Id”;
myComboBox.DataSoutce=列表;

Type它是System.Type是否在代码的其他地方使用Type属性?因为如果没有,只存储它的名称会更容易。我需要Id和类型。现在,我的类还有一个Name字段,我想从中删除。((Type)e.Value)。Name不能将“((System.Windows.Forms.ConvertEventArgs)(e)).Value”(实际类型为“EditorX.Model.ViewOfTable”)强制转换为“System.Type”string@Mikhail您的
显示成员是什么?确保它是我在代码中注意到的
“Type”
。实际上,您的代码正在工作。谢谢但在我看来,这是硬代码。这是唯一的办法?@Mikhail你为什么认为这是硬代码<代码>格式
事件就是为此目的而添加的。这是唯一最简单的方法。
文本框
甚至没有该事件。只有
ListControl
有,
ComboBox
继承自
ListControl
。因为我认为myComboBox.DisplayMember=“Type.Name”不是硬代码,但它不是工作。相反,我想去掉多余的属性。我也遇到了同样的问题,我用这个方法解决了问题。