2012-07-18 147 views
0

我正在創建一個用戶控件的過程中,這個控件會做一些工作,然後填充三個依賴項屬性,然後通過綁定控件的父元素使用它。WPF依賴項屬性MVVM

我的問題是什麼是哪裏使用MVVM保持依賴屬性的最佳做法? 我應該使用MVVM框架嗎?

感謝

+0

是的,使用MVVM框架。我喜歡MVVM-Light。 – 2012-07-18 19:42:42

+0

或Caliburn.Micro – EtherDragon 2012-07-18 19:54:15

+0

如果你正在研究MVVM框架,你可能會對這個問題感興趣:[我應該使用什麼MVVM框架?](http://stackoverflow.com/q/1409553/302677)。我個人使用Microsoft Prism,但偶爾我會使用MVVM光的部分(例如,當我想要一個當屬性改變時自動重新評估'CanExecute()'的命令時的'RelayCommand') – Rachel 2012-07-18 20:03:26

回答

2

慣用依賴屬性都無關由視圖模型表示,並沒有任何理由將它們添加到視圖模型「視圖狀態」。我將它們放在一個文件中,該文件包含您正在實施的控件的行爲。

+0

所以你的意思是把他們放在代碼隱藏? – Ali 2012-07-18 19:44:42

+0

我認爲你正在混淆MVVM與WPF控件的依賴項屬性。我會將代碼放在一個以您創建的控件命名的文件中。術語代碼隱藏通常保留用於連接特定對象。 – 2012-07-18 19:48:31

0

雖然您可以在不使用框架的情況下實現MVVM模式,但爲什麼要重新發明輪子?只需使用許多偉大的MVVM框架之一(Caliburn,MVVMLight,簡單MVVM工具包等等)。

+0

我必須從DependencyObject繼承我的視圖模型,這是一個很好的做法嗎? – Ali 2012-07-18 19:45:26

+0

我認爲有問題的屬性是與用戶控件狀態相關的DP,而不是與虛擬機上的模型相關的屬性。這意味着它們只能看到純屬性,屬於UC本身。 @Ali - 你的虛擬機不需要繼承DependencyObject。 – 2012-07-18 19:51:46

4

DependencyProperties是由WPF的綁定系統使用,它是將UI層綁定到數據層的。它們應該保存在UI層中,而不是數據層中(ViewModels

關於是否應該使用框架的問題是完全獨立的。

我肯定會推薦一個框架,包括經常在MVVM使用(一個基類繼承INotifyPropertyChanged,一個RelayCommandDelegateCommand,消息傳遞系統,如EventAggregtorMessenger等對象)通用的東西,但是我會鼓勵您花時間弄清楚MVVM在使用框架之前如何工作:)

+0

+1 Well說... – 2012-07-18 19:58:37