C# 如何为控件创建数据绑定';什么是嵌套属性?

C# 如何为控件创建数据绑定';什么是嵌套属性?,c#,winforms,data-binding,C#,Winforms,Data Binding,考虑以下几点: public interface IHaveProperties { public MyProperties Properties { get; set; } } public class MyControlA : SomeWinFormsControl, IHaveProperties { ... } public class MyControlB : SomeOtherWinFormsControl, IHaveProperties { ... } public

考虑以下几点:

public interface IHaveProperties
{
    public MyProperties Properties { get; set; }
}

public class MyControlA : SomeWinFormsControl, IHaveProperties { ... }

public class MyControlB : SomeOtherWinFormsControl, IHaveProperties { ... }

public class MyProperties
{
    public int Foo { get; set; }
    public string Bar { get; set; }
    public double Baz { get; set; }
    ...
}
这允许我们将相同的附加属性添加到许多无法修改的不同控件中,以及保存/加载属性集

现在我们已经有了十几种不同的MyControlX,我们已经意识到能够将数据绑定到,比如说,
Properties.Bar
,这将是一件好事

显然,我们可以这样做:

public interface IHaveProperties
{
    public MyProperties Properties { get; set; }
    public string Bar { get; set; }
}

public class MyControlA : SomeWinFormsControl, IHaveProperties
{
    public string Bar
    {
        get { return Properties.Bar; }
        set { Properties.Bar = value; }
    }
}
…但我们必须在十几个左右的控件中的每一个都放上相同的代码,这似乎有点臭

我们试过这样做:

// Example: bind control's property to nested datasource property
myTextBox.DataBindings.Add(new Binding("Text", myDataSet, "myDataTable.someColumn"))
// works!

// bind control's (nested) Properties.Bar to datasource
myTextBox.DataBindings.Add(new Binding("Properties.Bar", someObject, "AProperty"))
// throws ArgumentException!
是否有某种方法可以绑定到
myControl.Properties.Bar
,方法是以某种方式构造绑定或修改
MyProperties
类,而不是对所有控件进行相同的更改?

不应该是这样的:

TextBox.DataBindings.Add(new Binding("Text", someObject, "Properties.Bar"));

不是。问题是我想将myTextBox.Properties.Bar绑定到someObject.AProperty.Aa。至少我认为您需要在两侧实现InotifyProperty更改。相关:@Maarten Yep。这个问题涉及绑定的数据源端的属性嵌套,而我的问题涉及控件端的属性嵌套。