2010-09-14 112 views
2

當數據源對象的屬性不會在其設置器中引發PropertyChanged事件時,Silverlight中的雙向數據綁定如何工作?雙向數據綁定到POCO而沒有INotifyPropertyChanged

例如,代碼示例中,我已經看到了數據綁定到System.Windows.Point結構,它沒有實現INotifyPropertyChanged可變的實例。如果有人直接在Point中設置XY屬性,而不是用新實例替換對象,會發生什麼(或者應該發生)?

回答

2

Point是一個結構體,所以即使Point是可變的,從屬性調用得到的Point與存儲在基礎字段中的Point不同;這是一個副本。因此,如果您變更副本,則基礎字段保持不變。不需要更改屬性通知,因爲該屬性的值並未真正改變。如果該類實際上直接在其專用字段中突變了Point,那隻會有問題。這取決於類實現者是否要這樣做,或者在結構發生變化時手動調用PropertyChanged通知。

這是可變結構有危險的一個原因。他們不能通過財產進行變異,但班上的客戶可能會錯誤地認爲他們可能會變。

3

UI不更新。這裏沒有魔法。沒有事件拋出意味着UI將錯過更新。