2011-12-29 57 views
3

將WPF命令作爲獨立對象實現是否可行?如果是這樣,通常如何完成?我看到的關於命令的大多數示例通常涉及使用RoutedCommand,RoutedUICommand或其他一些ICommand實現,如RelayCommand。這些命令在MVVM模式中的工作方式是通過屬性公開這些類型命令之一的實例。在ViewModel內部,該命令的邏輯在ViewModel上作爲方法實現,然後作爲委託傳遞給命令對象。WPF中的獨立命令對象

據我所知,「經典」命令模式是將每個命令都實現爲自己的獨立對象,如OpenCustomerViewCommand。由於邏輯將完全封裝在自己的對象中,因此它可能會在我的應用程序的其他部分重用。例如,如果我可以在我的應用程序的多個位置打開CustomerView,那麼可以在每個可以訪問CustomerView的ViewModel上簡單創建OpenCustomerViewCommand的實例,而不是將該方法複製並粘貼到每個ViewModel中,並將代理傳遞給RelayCommand。如果我理解正確,那麼預定義的應用程序命令(如「剪切」和「粘貼」)就是這樣工作的。

對我來說,必須提供ViewModel內部的邏輯似乎會稍微減少命令模式的值。我想我不明白這樣做的主要區別,並有一個代碼實現UI事件的命令處理程序。是否有任何理由我應該使用RoutedCommand模式而不是上面描述的更經典的方法?

回答

3

你可以這樣做,但它需要一些適當的路由請求的方法。

在您的示例中,只要OpenCustomerViewCommand知道如何以及在哪裏打開「客戶視圖」,您可以輕鬆地在任何地方重複使用。不要使用像RelayCommand這樣的類,您可以直接實施ICommand並添加您的邏輯來執行此操作。

然而,問題在於大多數命令往往更多地是用於執行ViewModel特定功能的xaml適配器。在我工作的大多數應用程序中,通常只有很少的命令需要重用 - 大多數命令都與特定於ViewModel的功能綁定在一起。因此,像RelayCommand這樣的東西很容易掛鉤。