C#新手之控件數據綁定

我是個C#新手,最近有個程序要把TextBox的Text屬性與一個int屬性綁定,發現一個奇怪的事,在一個屬性中更改另一個屬性,TextBox控件顯示的值就可以自動更新,但用點擊按鈕的方法就無效。代碼:

用於演示的類Class1:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication3
{
    class Class1
    {
        private int _a = 1;

        public int A
        {
            get { return _a; }
            set 
            {

                if (_a != value)
                {
                    _b = value + 1;
                    _a = value; 
                }
            }
        }

        private int _b = 2;

        public int B
        {
            get { return _b; }
            set { _b = value; }
        }
    }
}

當A的值改變時,B變爲A+1。

界面:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        private Class1 _class1 = new Class1();
        private TextBox tbA;
        private TextBox tbB;
        private Button button1;

        public Form1()
        {
            tbA = new TextBox();  //與A綁定
            tbB = new TextBox();  //與B綁定
            button1 = new Button();
            
            tbA.Location = new Point(105, 39);
            tbA.Name = "tbA";
            tbA.Size = new Size(121, 21);
            
            tbB.Location = new Point(106, 118);
            tbB.Name = "tbB";
            tbB.Size = new Size(119, 21);
            
            button1.Location = new Point(148, 67);
            button1.Name = "button1";
            button1.Size = new Size(23, 45);
            button1.TabIndex = 2;
            button1.Text = "B加1";
            button1.Click += new System.EventHandler(button1_Click);

            this.Controls.Add(this.button1);
            this.Controls.Add(this.tbB);
            this.Controls.Add(this.tbA);

            tbA.DataBindings.Add("Text", _class1, "A");
            tbB.DataBindings.Add("Text", _class1, "B");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            _class1.B += 1;
        }
    }
}

在tbA中改變數值後按tab,tbB中的數值會自動更新。但點button1後B的值實際上是改變的,但控件中不會更新,除非用INotifyPropertyChanged。

public int B
        {
            get { return _b; }
            set
            {
                _b = value;
                NotifyPropertyChanged("B");
            }
        }


        #region INotifyPropertyChanged 成員

        public event PropertyChangedEventHandler PropertyChanged;
        public void NotifyPropertyChanged(string ProName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(ProName));
            }
        }
        #endregion

具體原因就是因爲DataBindings方法綁定是有聯動效果的,你要手動賦值就不行
tbA.Text=_class1.A;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章