winform 数据绑定 控件值更新问题

界面两个文本框和一个按钮共三个控件

一个实体类

public class Test
    {
        public double A { get; set; }
        public double B { get; set; }
    }


cs代码

int i = 0;
        Test test;
        private void simpleButton1_Click(object sender, EventArgs e)
        {
            if (test==null)
            {
                test = new Test();
                textEdit1.DataBindings.Add("EditValue", test, "B");
                textEdit2.DataBindings.Add("EditValue", test, "A");
            }
            test.A = test.B*10;
        }


 

出现问题:当textEdit1值变为1时,单击按钮后,textEdit2的值应变为10。但实际是textEdit1 为1时,单击按钮后 textEdit2值仍为0, textEdit1变为2时,textEdit2变为10;textEdit1变为3时,textEdit2变为20;即textEdit2反应总慢一拍。

原因:当数据源属性即test 的A值发生变化时,没有发出通知给DataBindings

解决办法:继承INotifyPropertyChanged

修改实体类如下:

using System.ComponentModel;
public class Test : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        double a;
        double b;
        public double A {
            get { return this.a; }
            set
            {
                if (value != this.a)
                {
                    this.a = value;
                    this.RaisePropertyChanged("A");
                }
            }
        }
        public double B { get; set; }
        private void RaisePropertyChanged(string propertyName)
        {
            var handler = this.PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }

    }


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WinForm中,控件绑定数据源是一种常见的操作,可以将数据源中的数据直接显示在对应的控件上,实现数据与界面的交互。 首先,我们需要创建一个数据源,可以是一个集合或是一个数据库查询结果,即我们需要显示的数据。接下来,在设计界面时,选择需要绑定数据源的控件,例如DataGridView、ListBox等。 然后,我们可以通过设计视图或代码来绑定数据源。在设计视图中,选择需要绑定数据源的控件,在属性窗口中找到DataBindings选项。点击DataBindings选项后,可以为该控件的不同属性绑定数据源,例如DataGridView的DataSource属性或ListBox的Items属性。 如果选择使用代码绑定数据源,则可以通过以下方式实现: 1. 首先,需要在代码中实例化控件对象,可以使用Visual Studio自动生成的代码或手动创建控件对象。 2. 接着,我们需要将数据源赋控件的相应属性。例如,若要将一个List<T>类型的集合绑定DataGridView控件,我们可以使用DataGridView控件DataSource属性,将集合赋给该属性。 3. 最后,我们需要调用控件更新方法,以确保数据源的内容更新控件上。对于DataGridView控件,可以使用Refresh()方法刷新显示内容。 需要注意的是,控件绑定数据源后,当数据源发生改变时,控件会自动更新显示内容。如果想获取用户对控件的操作,可以使用相应的事件来捕捉用户的操作,并对数据源进行相应的修改处理。 综上所述,WinForm控件绑定数据源是一种方便快捷的方式,能够实现数据与界面的交互,提升用户体验。无论是通过设计视图还是通过代码实现,我们都可以根据实际需求选择最适合的方式进行控件数据绑定
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值