星期二, 2月 08, 2011
0
使用 MVVM 最方便的優點之一,便是Data Binding。但常會有人問到:

為什麼 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了。

所以解決方式有二:
  1. 每次都是取得一條新的 List 並直接 Assign 給 Dependency Property (通常你會把Notify也寫在 setter 裡 )。
  2. 進行 Add()、Remove()、Clear()等操作後,手動對前端做Notify (也是合情合理啦~)。

0 回應:

張貼留言