簡體   English   中英

數據綁定自定義控件,更改后會更新數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM