数据绑定自定义控件,更改时更新数据

时间:2010-03-09 21:31:18

标签: c# winforms data-binding

我有一个与数据绑定相关的问题

如果我们的A类具有某些属性,例如“UserName”和文本控制T1绑定如下:

T1.DataBindings.Add("Text",A,"UserName",true,DataSourceUpdateMode.OnPropertyChanged); 

即。用户编辑文本时将更新属性

现在,如果不使用文本框,我们将自定义控件C1与控件属性“ControlProp”(例如MyEnum类型)绑定,并使用MyEnum类型属性MyProp绑定到B类,如下所示:

C1.DataBindings.Add("ControlProp ",B," MyProp",true,DataSourceUpdateMode.OnPropertyChanged); 

问题是:如何确保自定义控件的行为类似于上述文本框,即当ControlProp发生变化时,B类属性会更新?你的帮助非常宝贵。 Tnanks

2 个答案:

答案 0 :(得分:1)

首先,您的B类必须实现INotifyPropertyChanged接口。这是完整的代码或B类

public class ClassB : System.ComponentModel.INotifyPropertyChanged
{
    private string myprop;

    public string MyProp
    {
    get
    {
        return myprop;
    }
    set
    {
        if (value != myprop)
        {
        myprop = value;
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs("MyProp"));
        }


        }


    }
    }

    #region INotifyPropertyChanged Members

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

    #endregion

}

然后,假设你的自定义控件里面有一个标签,你想要将标签的文本与你的B类实例绑定。例如:

public partial class MyCustomControl : UserControl
{
    public MyCustomControl()
    {
        InitializeComponent();
    }

    public string MyCustomProperty
    {
        get
        {
            return label1.Text;
        }
        set
        {
            label1.Text = value;
        }
    }
}

如果将类B的属性MyProp绑定到自定义控件的MyCustomProperty,则在更改对象中的属性时,label1应更改其文本。

    ClassB objectB = new ClassB();

    C1.DataBindings.Add("MyCustomProperty", objectB, "MyProp", true, DataSourceUpdateMode.OnPropertyChanged);

    objectB.MyProp = "Text 1";
    objectB.MyProp = "Text 2";

    // The final text is Text2

答案 1 :(得分:0)

我认为我找到了解决方案:在控件定义中添加了Inotifypropertychange: public partial class MyCustomControl:UserControl,INotifyPropertyChanged 在控件属性设置器中,我引发了事件(如Javier Morillo的例子)

感谢所有