2010-03-09 95 views
1

我有綁定勢必定製控制與數據更新數據時改變

如果我們有A級的一些屬性,例如「用戶名」和文本控制T1必將爲後續數據相關的問題:

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

Ie屬性將在用戶編輯文本時更新

現在,如果不是文本框,而是使用控件屬性「ControlProp」(例如類型爲MyEnum)的自定義控件C1,並且它與具有MyEnum類型屬性MyProp的類B綁定爲以下:

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

的問題是:如何能夠保證類似於上述,即B類屬性將被更新的文本框自定義控制的行爲,當ControlProp改變?你的幫助將是非常有價值的。 Tnanks

+0

你問關於UC屬性還是B類屬性? – 2010-03-09 21:38:09

+0

換句話說,我的問題:我如何確保使用DataSourceUpdateMode.OnPropertyChanged自定義控件的行爲類似於標準(例如TextBox)控件? – 2010-03-09 22:16:43

回答

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 

} 

然後,suposse您的自定義控制裏面有一個標籤,並且要在標籤的文字時,將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 
+0

感謝您的回覆。相反方向: 例如,自定義控件包含綁定到某些枚舉類型字段的單選按鈕集。如何確保基礎數據在控件失去焦點之前進行更新? – 2010-03-09 22:29:30

+0

我正在嘗試,但我沒有在正確的時間更新對象字段...我會告訴你,如果我弄清楚如何... – Javier 2010-03-10 15:19:43

0

我想我找到了解決辦法:增加Inotifypropertychange到控制定義: 公共部分類MyCustomControl:用戶控件,INotifyPropertyChanged的 而在控制屬性setter我引發事件(如哈維爾Morillo的的例子)

感謝所有

相關問題