新手请教TextBox的Text属性绑定问题
我是个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; } } }}
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; } }}
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里面没有通知界面。 哪有这么聪明的