[英]Data bound custom control with updating data when changed
我有一個與數據綁定有關的問題
如果我們有一個帶有某些屬性的類A,例如“ UserName”和綁定的文本控件T1,如下所示:
T1.DataBindings.Add("Text",A,"UserName",true,DataSourceUpdateMode.OnPropertyChanged);
用戶編輯文本時,即會更新IE屬性
現在,如果不是文本框,我們將具有控件屬性“ ControlProp”的自定義控件C1(例如,類型為MyEnum),並將其綁定到具有屬性MyProp的類MyEnum的類B,如下所示:
C1.DataBindings.Add("ControlProp ",B," MyProp",true,DataSourceUpdateMode.OnPropertyChanged);
問題是:如何確保自定義控件的行為類似於上述文本框,即在ControlProp更改時將更新B類屬性? 您的幫助將非常寶貴。 坦克
首先,您的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
我想我找到了解決方案:在控件定義中添加了Inotifypropertychange:公共局部類MyCustomControl:UserControl,INotifyPropertyChanged在控件屬性設置器中,我引發了該事件(如哈維爾·莫里略的示例)
謝謝大家
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.