2012-09-28 31 views
3

我想知道如果在MVVM中我應該設計轉換器和命令更接近視圖或ViewModels。對我來說,這是一個灰色區域,因爲它們是兩種類型的膠水物體,彌補了組件之間的差距。也許它並不重要,但我想知道Stack Overflow對此有何評論。語義上,命令和轉換器應該更接近Views還是ViewModels?

我曾經將轉換器放置在ViewModel命名空間中,因爲即使View發生更改,它們通常也是可重用的。不過,我看到越來越多的評論將它們放在視圖旁邊。見上面的答案:
Should your ViewModel expose XAML elements as properties or not?
How can WPF Converters be used in an MVVM pattern?

命令通常是由暴露的ViewModels實現UI事件,所以我把他們安置在視圖模型命名空間爲好。一個典型的例子是RelayCommands。然後我遇到了一個有趣的模式,使用Commands在主視圖和ViewModel之間顯示對話框。我發現它簡單明瞭。這個命令實際上只是一個代理,但顯然在用戶界面上。是還是不是?請參閱:
MVVM and Dialogs
Handling Dialogs in WPF with MVVM

那麼,你覺得命令和轉換器應該生活在MVVM?視圖?視圖模型?沒關係?

回答

0

我不認爲你可以說他們在一個陣營或其他。正如你所說的,他們的目的是在ViewModel和View之間架起一座橋樑,同時保持它們不耦合。在我看來,這就是你應該如何對待他們,作爲膠水代碼。

轉換器 - 你可以爭辯說,它們更接近的觀點,因爲他們的責任是有關信息是如何適應以輕鬆約束,並在XAML控件顯示。

此外,理論上可以使用兩個不同的轉換器來獲得相同的ViewModel屬性,具體取決於您希望如何查看它。

但是,如果需要出現,視圖根本不參與的地方,沒有任何東西阻止您在其他環境中使用它們。

由於您的問題也暗示將它們放在哪裏,因此我將轉換器分別放在視圖文件夾和ViewModels文件夾中,以便於重複使用。

命令 - 通常由視圖模型在MVVM露出,可以說他們是更接近視圖模型,但在我的經驗,他們最經常使用,以方便通過綁定從視圖模型調用邏輯參數。如果我可以在xaml中直接綁定ViewModel方法調用,那麼我就不會再使用命令了 - 對於簡單的情況。

即使它們通常綁定到ViewModel,命令也可以在Views和ViewModels之間重複使用。如果您發現自己複製粘貼代碼的命令可以將它們分開,請將ViewModel放在界面後面並重新使用它們。

此外,命令模式在MVVM範圍之外有許多用途。 (例如,您可以在應用程序邏輯中使用它來方便「撤消」功能)

至於放置它們的位置 - 通常我首先將它們放在ViewModel中,隨着事情變得更加複雜,我將它們移動爲需要。這裏有一個有趣的帖子,你可以做些什麼,因爲事情變得複雜:How can I avoid command clutter in the ViewModel?

我知道這是一個主觀的答案,但我希望我提供了一些很好的論點,並且我願意發表意見。

相關問題