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不做刷新
Mode写个Clone方法,A,B用不同的引用,比如B传递Clone副本;
INotifyPropertyChanged调用的时候加个Flag{get;set;}变量,外部通过设置该Flag可以控制INotifyPropertyChanged.Invoke即可。
太感谢了 真的可以诶 ,烦恼了好几天。
你可以了解一下这个接口 INotifyPropertyChanged, 不要用定时器刷新。
用事件,当要更新A控件的时候 ,触发事件,并且传递A控件修改的值过去,再在事件中把这个值赋值给B控件的属性
我就是用的 INotifyPropertyChanged种方式。绑定的界面数值,定时器更新A值 通过INotifyPropertyChanged里面的方法通知界面,问题是界面可能绑定的同一个ViewModel原因,更新界面时只要是同一个Viewmodel的数据就全部被更新了。
@赵大大: ViewModel赋值给一个新对象;再把新对象给Lable2
@赵大大:
this.Lable1.Databinds.Add("Text",ViewModel,"A");
var vm=ViewModel;
this.Lable2.Databinds.Add("Text",vm,"B");
@抽象ID: 这样有什么意义吗,我A值和B值都是在一个对象当中,吧ViewModel赋值给别的新对象,没办法解决根本问题
@赵大大: 那就直接改控件显示的值,不改动实体对象;
@抽象ID: 现在就是想使用双向绑定,将逻辑与界面分离开来
200个豆啊。
可惜很多年不碰winform了,winform的绑定应该是自己的或者第三方的库吧。
感觉无外乎那些东西
使用的是系统绑定方法
@赵大大: 哈哈,进一步证明多年不碰了