[問題] Winform Class NotifyPropertyChanged

看板C_Sharp (C#)作者 (ManGo)時間1年前 (2022/12/27 13:00), 1年前編輯推噓1(106)
留言7則, 3人參與, 2年前最新討論串1/1
目前有想到一個我個人認為還算可以的解法 分享一下,如果有更好的還請不吝賜教 首先因為使用的是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://www.ptt.cc/bbs/C_Sharp/M.1672117228.A.98B.html

12/27 13:07, 1年前 , 1F
object被new了binding要重設
12/27 13:07, 1F

12/27 19:27, 1年前 , 2F
PropertyChanged是屬性變更吧,你已經把整個物件換掉了
12/27 19:27, 2F

12/27 19:27, 1年前 , 3F
當然不會出發原本的class的事件
12/27 19:27, 3F
原因我大概知道,只是好奇這種情況要怎麼處理 因為被覆蓋掉的Class有N多個屬性 還是有甚麼方法可以直接讓一個Class內的屬性 全部等於另一個相同的Class 但記憶體位置是保留的

12/28 18:35, 1年前 , 4F
改為bind父物件呢?
12/28 18:35, 4F

12/28 18:35, 1年前 , 5F
例如label1.DataBind.Add("Text", this, "Test.Name", ...
12/28 18:35, 5F
剛剛試了一下,似乎沒作用,不過謝了~

12/29 13:51, 1年前 , 6F
把bind寫在set裡面就確保每次都連到新物件了
12/29 13:51, 6F
※ 編輯: ManGo1012 (118.163.83.72 臺灣), 01/03/2023 13:23:56

01/03 19:22, 2年前 , 7F
你可以先clear再add就不會重複了
01/03 19:22, 7F
文章代碼(AID): #1ZgdlicB (C_Sharp)
文章代碼(AID): #1ZgdlicB (C_Sharp)