DisplayMember 如果自动感知 DataSource 中的字段名称

做了一个控件,将Label 和 ComboBox 组合在一起,其中 Label 用于显示标题,ComboBox 与后端数据表的字段相连,显示字段的内容。控件样式如下:
图片说明

现在合在一起的新控件,有属性 "DataSource" / "DisplayMember" / "ValueMember",该属性与单个控件中的 ComboBox 中对应属性完全相同,希望新控件实例化后与原单独 ComboBox 一样,能有自动的窗体数据源感知和数据表字段感知功能。经过反复测试, DataSource 能感知窗体中的数据源,设定如下:
[Description("数据源"), Category("数据")]
[RefreshProperties(RefreshProperties.Repaint)]
[AttributeProvider(typeof(IListSource))]
public object DataSource
{
get { return this.comboBox1.DataSource; }
set { comboBox1.DataSource = value; }
}

但 DisplayMember / ValueMember 用如下的程序,无法在 DataSource 确定的情况下,自动感知该数据源的字段!!:

[Description("显示的绑定字段"), Category("数据")]
public string DisplayMember
{
  get { return this.comboBox1.DisplayMember; }
  set { this.comboBox1.DisplayMember = value; }
}


[Description("值的绑定字段"), Category("数据")]
public string ValueMember
{
  get { return this.comboBox1.ValueMember; }
  set { this.comboBox1.ValueMember = value; }
}

希望达到的效果(单个 ComboBox 情况下):
图片说明
图片说明

目前错误的效果:

图片说明
选定 DataSource 后,DisplayMember 没有任何变化,不会出现下拉框。

求助:这个应该如何设计????

谢谢,我已经测试出来了,用如下的办法:
[Description("控件绑定到的数据源的字段"), Category("数据")]
[TypeConverter("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design,Version = 4.0.0.0 , Culture = neutral , PublicKeyToken = b03f5f7f11d50a3a")]
[Editor("System.Windows.Forms.Design.DataMemberFieldEditor, System.Design, Version = 4.0.0.0 , Culture = neutral , PublicKeyToken = b03f5f7f11d50a3a" , typeof(UITypeEditor))]
public string DataField
{
get { return MyLabel.DataField; }
set { MyLabel.DataField = value; }
}

2010以上

 [TypeConverterAttribute("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
 [TypeConverterAttribute("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] 
加上这一行

public partial class UserControl1 : BAOLibrary.控件库.控件标题
{
public UserControl1()
{
InitializeComponent();
}

[Description("数据源"), Category("数据")]
[RefreshProperties(RefreshProperties.Repaint)]
[AttributeProvider(typeof(IListSource))]
public object DataSource
{
  get { return this.comboBox1.DataSource; }
  set { comboBox1.DataSource = value; }
}

[Description("显示的绑定字段"), Category("数据")]
[TypeConverterAttribute("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public string DisplayMember
{
  get { return this.comboBox1.DisplayMember; }
  set { this.comboBox1.DisplayMember = value; }
}


[Description("值的绑定字段"), Category("数据")]
[TypeConverterAttribute("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public string ValueMember
{
  get { return this.comboBox1.ValueMember; }
  set { this.comboBox1.ValueMember = value; }
}

}

是这样加吗?不起作用,我用的是 VS2015
 再加上
[Editor("System.Windows.Forms.Design.DataMemberFieldEditor, " + AssemblyRef.SystemDesign, typeof(System.Drawing.Design.UITypeEditor))]

看ComboBox的定义,需要指定一个Designer,你可以尝试指定System.Windows.Forms.Design.ComboBoxDesigner,如果不行的话,就自己写一个;

    // 摘要:
    //     表示 Windows 组合框控件。
    [ClassInterface(ClassInterfaceType.AutoDispatch)]
    [DefaultProperty("Items")]
    [DefaultBindingProperty("Text")]
    [SRDescription("DescriptionComboBox")]
    [DefaultEvent("SelectedIndexChanged")]
    [ComVisible(true)]
    [Designer("System.Windows.Forms.Design.ComboBoxDesigner, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
    public class ComboBox : ListControl