读书人

新手请问TextBox的Text属性绑定有关问

发布时间: 2012-09-18 16:21:42 作者: rapoo

新手请教TextBox的Text属性绑定问题
我是个C#新手,最近有个程序要把TextBox的Text属性与一个int属性绑定,发现一个奇怪的事,在一个属性中更改另一个属性,TextBox控件显示的值就可以自动更新,但用点击按钮的方法就无效。请看代码:

用于演示的类Class1:

C# code
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。

界面:
C# code
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。请问原因在哪里?

[解决办法]
DataBindings方法绑定是有联动效果的,你要手动赋值就不会
tbA.Text=_class1.A;

[解决办法]
你只是更改了B属性的值,而没有通知客户端B属性值已经更改
C# code
 class Class1 : INotifyPropertyChanged    {        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;                NotifyPropertyChanged("B");            }        }        #region INotifyPropertyChanged 成员        public event PropertyChangedEventHandler PropertyChanged;        public void NotifyPropertyChanged(string ProName)        {            if (PropertyChanged != null)            {                PropertyChanged(this, new PropertyChangedEventArgs(ProName));            }        }        #endregion    }
[解决办法]
没有 INotifyPropertyChanged 相当于单向绑定。



你自己把数据的值改了 用了set当时在Set里面没有通知界面。 哪有这么聪明的

读书人网 >C#

热点推荐