我正在對WPF和MVVM進行一些研究,以評估這是我們希望在項目中實現的事情。處理應用程序範圍命令
有一件事情我不明白(我的WPF書還沒有到)。
我讀過Josh Smith的文章'Model-View-ViewModel Design Pattern中的WPF應用程序'以及他的文章'在WPF中使用ViewModel中的RoutedCommands'。
我的演示應用程序與Josh Smith的演示程序稍有不同,因爲我的菜單項不直接綁定到主視圖模型,而是由其他視圖模型處理。
我的主窗口綁定到一個MainViewModel對象,該對象公開一個名爲View的對象(從ViewModelBase類派生並通過ContentControl綁定到主窗口)。這個View對象被替換爲不同的ViewModel,比如CustomerViewModel,CustomersViewModel等等(這些都是使用我的資源字典中定義的視圖呈現的:)。
所有這一切都很好找,但由於我不想在我的主窗口(如新建,保存等)中啓用應該啓用的項目,根據視圖禁用,我在CommandSink上找到了Josh Smith的文章模式(?),但他表示它已經過時,而應該使用RelayCommand。
現在我很困惑,因爲我無法弄清楚如何使用這種方法來實現這個功能。
感謝, 文森特
謝謝您的回覆。這與我如何使用與當前活動視圖緊密耦合的命令來做到這一點接近,並且您的示例是我如何認爲應使用RelayCommand。它並沒有'禁用'視圖不處理的命令,這是我的目標 - 而是列出了視圖可以處理的每個命令。 – Vincent 2010-12-18 10:14:54
感謝您的回覆。您所描述的方法與我在WinForms應用程序中執行的方式非常相似。它給菜單系統提供了更多的控制。我想我認爲所有這一切都可以使用XAML :) – Vincent 2010-12-19 09:47:38
再次嗨。我正在努力做出一個好的解決方案,我不確定我還在那裏。在你的代碼示例中,你檢查一個CustomerView。您可能指的是CustomerViewModel,但除此之外。這種方法需要對每個支持Save命令的ViewModel進行轉換。目前我正在嘗試使用CommandSink(Josh Smith)來完成這項工作,但由於它'已過時',所以我不確定... – Vincent 2010-12-20 21:05:58