作者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/m.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