加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

c#winform界面数据实时更新INotifyPropertyChanged

(2016-04-07 09:46:37)
标签:

c界面数据更新

杂谈

it

UserControl需要放置到主窗体Form中,由于UserControl需要用到Form中的一些数据,所以建立了一个专门的Model类来保存这些数据:
using System.ComponentModel;
public class Data: INotifyPropertyChanged
    {
        private int num;
        public int _num
        {
            get { return num; }
            set
            {
                num = value;
                NotifyPropertyChanged("_num");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(string info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
    }
通过INotifyPropertyChanged进行监视的,一旦有值发生改变,便会马上抛出通知来.
首先 Data data=new Data();
通过DataBindings将Model的DealId字段绑定到了TextBox上.
TextBox.DataBindings.Add("Text"data, "_num");
另外:在UserControl中,将这个Model中的一些字段通过DataBindings给绑定起来,由于更新过程中,有跨线程操作,所以通过Control.Invoke进行调用:
txtDaemonDealId.Invoke((Action)(() =>
{TextBox.DataBindings.Add("Text"data, "_num");}));
参数num在赋值时一般不会在主线程下,TextBox绑定肯定处于UI线程中,如果两个处理均在同一个线程中进行,肯定会发生阻塞,导致界面假死。如果从一个直接访问另外一个,肯定是要出现问题的(由于采用了INotifyPropertyChanged接口,所以Model的任何改变都会自动更新到前台UI上),所以在这里,我们要以异步方式来更新Model,让其数据的更新可以和UI进行交互.
this.Invoke((Action)(() =>
{
data._num=23;
}));  

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有