作者ManGo1012 (ManGo)
看板C_Sharp
标题[问题] Winform Class NotifyPropertyChanged
时间Tue Dec 27 13:00:26 2022
目前有想到一个我个人认为还算可以的解法
分享一下,如果有更好的还请不吝赐教
首先因为使用的是MVP模式
所以DataBinding这块希望都在View内搞定,不要外扩到Presenter
目前的解法是这样
假设此问题中会被覆盖的Class於Presenter内叫做Test
现在就是将View内的Presenter实体新增PropertyChanged事件
然後当Test被set时
将那些跟其有关的Winform元件属性重新绑定
有一点要注意的是
原本元件的DataBinding.Add()会有重复绑定的问题
所以有做一个专门用於处理的Class
会把原本目标元件已有的DataBinding移除
------------------------------
大家好
想请问一下
我在Winform内设置如下Class
https://imgur.com/RmsoIGn
并将Label.Text绑定到两个属性
执行後有显示预期结果,显示绑定有效
https://imgur.com/Sxboubx
https://imgur.com/zCgamLa
但不知道为什麽如果直接指定整个Class(Button_Click之後)
值有更新,不过Label.Text没有跟着更新
https://imgur.com/cuKh9eH
同样的程式码在WPF内是有用的
不知道为何Winform就没有
总之就是如果直接set整个Class
要怎麽触发所有子属性的NotifyPropertyChanged?
因为目标是用在复杂多层的Class
不太可能逐一属性设定来触发NotifyPropertyChanged的delegate
感谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.80.132 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1672117228.A.98B.html
1F:→ testPtt: object被new了binding要重设 12/27 13:07
2F:→ sating00: PropertyChanged是属性变更吧,你已经把整个物件换掉了 12/27 19:27
3F:→ sating00: 当然不会出发原本的class的事件 12/27 19:27
原因我大概知道,只是好奇这种情况要怎麽处理
因为被覆盖掉的Class有N多个属性
还是有甚麽方法可以直接让一个Class内的属性
全部等於另一个相同的Class
但记忆体位置是保留的
4F:推 poewar: 改为bind父物件呢? 12/28 18:35
5F:→ poewar: 例如label1.DataBind.Add("Text", this, "Test.Name", ... 12/28 18:35
刚刚试了一下,似乎没作用,不过谢了~
6F:→ testPtt: 把bind写在set里面就确保每次都连到新物件了 12/29 13:51
※ 编辑: ManGo1012 (118.163.83.72 台湾), 01/03/2023 13:23:56
7F:→ testPtt: 你可以先clear再add就不会重复了 01/03 19:22