看板 C_Sharp 關於我們 聯絡資訊
目前有想到一個我個人認為還算可以的解法 分享一下,如果有更好的還請不吝賜教 首先因為使用的是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
testPtt: object被new了binding要重設 12/27 13:07
sating00: PropertyChanged是屬性變更吧,你已經把整個物件換掉了 12/27 19:27
sating00: 當然不會出發原本的class的事件 12/27 19:27
原因我大概知道,只是好奇這種情況要怎麼處理 因為被覆蓋掉的Class有N多個屬性 還是有甚麼方法可以直接讓一個Class內的屬性 全部等於另一個相同的Class 但記憶體位置是保留的
poewar: 改為bind父物件呢? 12/28 18:35
poewar: 例如label1.DataBind.Add("Text", this, "Test.Name", ... 12/28 18:35
剛剛試了一下,似乎沒作用,不過謝了~
testPtt: 把bind寫在set裡面就確保每次都連到新物件了 12/29 13:51
※ 編輯: ManGo1012 (118.163.83.72 臺灣), 01/03/2023 13:23:56
testPtt: 你可以先clear再add就不會重複了 01/03 19:22