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

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

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

 

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

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

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

XHTMLspa

 

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

 

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

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

相關文章
相關標籤/搜索