與任何MVVM WPF應用程序一樣,我有一些視圖模型。每個都有一些命令。我的視圖實現了Fluent UI(Office功能區),因此有些項目會根據應用程序的上下文而點亮。功能區是主應用程序的子項。設置來自多個視圖模型的WPF命令
我的應用程序的基本結構是它管理一個課程。一個課程有多個模塊,所以我有一個虛擬機課程&模塊...並且每個都有命令。
當應用程序加載時,我將主窗口的數據上下文設置爲課程,以便將課程命令綁定到功能區很容易,並且工作正常。
用戶開始使用模塊時遇到了挑戰。從列表中選擇模塊時,詳細信息將顯示在另一個用戶控件中。現在...我的挑戰是如何將命令連接到功能區。
我假設我可以有一些事件處理程序,它可以編程方式將當前模塊的命令連接到功能區中的所有相關控件,並在上下文消失時刪除所有內容。但是這似乎是很多不必要的工作。有沒有更乾淨的方式來做到這一點?
我想過路由命令/事件,但有人告訴我,這不起作用,因爲他們不會把所有的東西都吹到窗口並退回到功能區。
尋找一些指導在這裏...我有點MVVM(但喜歡它!)noobot!)。
有趣的想法,試着讓它實現,看看這是如何工作的。我在我的MainWindow類中創建了ShellCommands對象類和一個公共屬性(因爲當應用程序加載時,它創建了CourseViewModel的一個實例並將其綁定到DataContext,然後將ShellCommands屬性傳遞給CourseViewModel。它到一個按鈕,命令不會觸發。在創建CourseViewModel後設置斷點後,我可以看到命令已經連線,但它不會觸發......同樣的命令在沒有此方法的情況下觸發(所以CanExecute想法? – 2010-05-08 11:03:26
劃傷最後的評論...我在CourseViewModel上連接了一個命令,但是下游我創建了具有自己命令的ModuleViewModel實例,問題是主窗口上的ShellCommand屬性isn沒有得到這些新命令的更新,因爲它們是ModuleViewModel的新實例。似乎這將是人們經常遇到的挑戰。是否沒有普遍接受的技術解決它(或者我只是以這種錯誤的方式進行)? – 2010-05-08 11:25:27
當我理解你的評論權利時,你只需要在ShellCommands上實現INotifyPropertyChanged接口。當ModuleViewModel設置命令時,ShellCommands對象引發一個PropertyChanged事件並通知WPF它必須在主窗口中更新命令綁定。 – jbe 2010-05-09 12:17:38