我有一个与数据绑定相关的问题
如果我们的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
答案 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的例子)
感谢所有