首页 新闻 会员 周边 捐助

WinFrom双向绑定问题

0
悬赏园豆:200 [已解决问题] 解决于 2018-03-08 16:39

winfrom 双向绑定可不可以想刷新界面哪个值就刷新哪个值 ,不需要全部刷新。
我当前Viewmodel类当中有一个定时器定时刷新界面数值,比如我刷新 A控件数值时 B控件数值也跟着变化了,初步测试感觉是界面绑定A控件和B控件绑定的是一个源头的数据,但是A控件,B控件绑定的源头的属性不同。有没有什么方法更新只更新要刷新的属性,没有提到的不刷新

问题补充:

比如:

  this.Lable1.Databinds.Add("Text",ViewModel,"A");

  this.Lable2.Databinds.Add("Text",ViewModel,"B");

 

后台有个定时器实时刷新。

  当只刷新A值时,B值也跟着刷新了。原因可能是界面上绑定的是同一个Viewmodel。

  如何解决绑定同一个Viewmodel,当后台刷新A值,B不做刷新

赵大大的主页 赵大大 | 初学一级 | 园豆:1
提问于:2018-03-08 11:29
< >
分享
最佳答案
0

Mode写个Clone方法,A,B用不同的引用,比如B传递Clone副本;

INotifyPropertyChanged调用的时候加个Flag{get;set;}变量,外部通过设置该Flag可以控制INotifyPropertyChanged.Invoke即可。

收获园豆:200
花飘水流兮 | 专家六级 |园豆:13615 | 2018-03-08 14:41

太感谢了  真的可以诶 ,烦恼了好几天。

赵大大 | 园豆:1 (初学一级) | 2018-03-08 16:40
其他回答(3)
0

你可以了解一下这个接口 INotifyPropertyChanged, 不要用定时器刷新。

爱编程的大叔 | 园豆:30844 (高人七级) | 2018-03-08 11:34
1

用事件,当要更新A控件的时候 ,触发事件,并且传递A控件修改的值过去,再在事件中把这个值赋值给B控件的属性

悟行 | 园豆:12559 (专家六级) | 2018-03-08 11:34

我就是用的 INotifyPropertyChanged种方式。绑定的界面数值,定时器更新A值 通过INotifyPropertyChanged里面的方法通知界面,问题是界面可能绑定的同一个ViewModel原因,更新界面时只要是同一个Viewmodel的数据就全部被更新了。

支持(0) 反对(0) 赵大大 | 园豆:1 (初学一级) | 2018-03-08 11:39

@赵大大: ViewModel赋值给一个新对象;再把新对象给Lable2

支持(0) 反对(0) 悟行 | 园豆:12559 (专家六级) | 2018-03-08 11:41

@赵大大: 

this.Lable1.Databinds.Add("Text",ViewModel,"A");

var vm=ViewModel;

  this.Lable2.Databinds.Add("Text",vm,"B");

支持(0) 反对(0) 悟行 | 园豆:12559 (专家六级) | 2018-03-08 11:42

@抽象ID: 这样有什么意义吗,我A值和B值都是在一个对象当中,吧ViewModel赋值给别的新对象,没办法解决根本问题

支持(0) 反对(0) 赵大大 | 园豆:1 (初学一级) | 2018-03-08 11:43

@赵大大: 那就直接改控件显示的值,不改动实体对象;

支持(0) 反对(0) 悟行 | 园豆:12559 (专家六级) | 2018-03-08 13:34

@抽象ID: 现在就是想使用双向绑定,将逻辑与界面分离开来

支持(0) 反对(0) 赵大大 | 园豆:1 (初学一级) | 2018-03-08 13:35
-1

200个豆啊。

可惜很多年不碰winform了,winform的绑定应该是自己的或者第三方的库吧。

感觉无外乎那些东西

日暮青色 | 园豆:495 (菜鸟二级) | 2018-03-08 11:40

使用的是系统绑定方法

支持(0) 反对(0) 赵大大 | 园豆:1 (初学一级) | 2018-03-08 11:40

@赵大大: 哈哈,进一步证明多年不碰了

支持(0) 反对(0) 日暮青色 | 园豆:495 (菜鸟二级) | 2018-03-08 11:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册