C#:TextBox數據綁定


經常寫用一個TextBox顯示某個對象,然后編輯之后再保存的程序。以前都是在TextBox_TextChanged事件中修改對象的值,或者保存的時候再讀取TextBox.Text屬性保存對象的值。這樣比較麻煩,而且經常容易出錯。后來了解了C#的數據綁定,發現能夠很好的解決這個問題。

1. 首先C#的TextBox本身就帶數據綁定功能。

下面的代碼就是把_myData對象的"TheValue"屬性綁定到textBox1和textBox2的"Text"屬性。最后一個參數不同:

1)其中DataSourceUpdateMode.OnPropertyChanged表示textBox1.Text發生變化,_myData.TheValue也變化,叫雙向綁定。

2)DataSourceUpdateMode.Never表示Text1.Text變化不影響_myData.TheValue的值,是單向綁定。

private void Form1_Load(object sender, EventArgs e)
{
    _myData = new MyData();
    textBox1.DataBindings.Add("Text", _myData, "TheValue", false, DataSourceUpdateMode.OnPropertyChanged);
    textBox2.DataBindings.Add("Text", _myData, "TheValue", false, DataSourceUpdateMode.Never);
}

 

2.也許有人留意到了,為什么上面的叫"雙向綁定"呢?如果_myData.TheValue的值變化了,兩個文本框的Text會變化嗎?不錯,僅在 textBox上數據綁定還不叫雙向綁定,對象數據變化要通知綁定該對象的控件才行。這樣就需要對象實現INotifyPropertyChanged接 口。

public class MyData : INotifyPropertyChanged
{
    private string _theValue = string.Empty;
 
    public string TheValue
    {
        get { return _theValue; }
        set
        {
            if (string.IsNullOrEmpty(value) && value == _theValue)
                return;
 
            _theValue = value;
            NotifyPropertyChanged(() => TheValue);
        }
    }
 
    public event PropertyChangedEventHandler PropertyChanged;
 
    public void NotifyPropertyChanged<T>(Expression<Func<T>> property)
    {
        if (PropertyChanged == null)
            return;
 
        var memberExpression = property.Body as MemberExpression;
        if (memberExpression == null)
            return;
 
        PropertyChanged.Invoke(this, new PropertyChangedEventArgs(memberExpression.Member.Name));
    }
}

 

3.好了,數據綁定完成了,看看效果吧。textBox1.Text變化—>_myData.TheValue變化—>textBox2.Text變化。反過來textBox2.Text變化就不是這樣了,因為textBox2使用的單向綁定。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM