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 了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM