WPF 用戶控件的自定義依賴屬性在 MVVM 模式下的使用備忘

依賴屬性相當於擴充了 WPF 標籤的原有屬性列表,並可以使用 WPF 的綁定功能,可謂是十分方便的;用戶控件則相當於代碼重用的一種方式;以上幾點分開來還是比較好理解的,不過要用到MVVM 模式中,還是要探索一番的。

我們先新建一個用戶控件(UC_FoodsPanel.xaml),裏面放一個 StackPanel:

 

依賴屬性相關內容可參考網上的《WPF 系列 —— 控件添加依賴屬性 – 朝兮兮 – 博客園》 一文,添加依賴屬性的方法爲 —— 輸入 propdp 再雙擊 tab 鍵。

 上面代碼中,我們添加的依賴屬性爲 Items,是一個 UC_FoodItem 類的列表。關鍵在於屬性改變時的回調函數 PropertyChangedCallback,其 obj 參數代表屬性綁定的控件,即此處的 UC_FoodsPanel,args 參數中有 OldValue 和 NewValue,分別代表屬性改變前後的值。此處即取改變後的值 —— 一個列表 —— 賦給用戶控件中的 StackPanel。

 這樣之後,我們在其它頁面(Views\\MainWindowView.xaml)使用這個用戶控件的時候,就可以使用 Items 屬性了:

XHTML

 

ViewModel 中的綁定屬性使用了 INotifyPropertyChanged 模式,此處是使用了 Prism 框架的寫法(VM 繼承了 BindableBase 類)。然後注意到這裏新建了一個局部變量 items,填充完數據才賦值給 Items,這並不是多此一舉,因爲不這樣的話,該屬性的改變狀態(PropertyChangedCallback)就無法觸發。

 

最後但同樣重要的是:既然這個用戶控件這麼簡單,爲什麼不直接把裏面的內容包括依賴屬性寫在使用的頁面呢?因爲那樣的話,由於 MVVM

模式的原因,頁面的 DataContext 已經指定爲相關的 ViewModel 了,那麼寫在後臺的依賴屬性就找不到 DataContext 了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章