為什麼 Textbox、Label等單一元素都會很正確的隨 viewmodel 中的新值而自動更新前端的顯示,但 ListView、DataGrid等使用 ItemsSources 來對一個 ICollection進行Binding的控制項就有時正常,有時不動?
其實原因很單純:
變動了值,就要進行對 view 的 Notify 。(怎麼那麼基本....)
所以,如果是把一整個新的 List 給 Assign 到某一個 Dependency Property上,便會觸發通常僅寫在 setter 的 Notify 。
(↓↓↓↓盲點在這裡↓↓↓↓)
但是,如果是對某一個型態為 List的 Dependency Property做 Add()、Remove()、Clear()等操作,此時呼叫的是該 Property 的 getter,所以便不會對前端的 view 進行 Notify了。
所以解決方式有二:
- 每次都是取得一條新的 List 並直接 Assign 給 Dependency Property (通常你會把Notify也寫在 setter 裡 )。
- 進行 Add()、Remove()、Clear()等操作後,手動對前端做Notify (也是合情合理啦~)。
0 回應:
張貼留言