从多个视图模型设置WPF命令

时间:2010-05-06 18:11:48

标签: wpf ribbon mvvm

与任何MVVM WPF应用程序一样,我有一些视图模型。每个都有一些命令。我的视图实现了一个Fluent UI(Office功能区),因此有些项目会根据应用程序的上下文点亮。功能区是主要应用程序的子项。

我的应用程序的基本结构是它管理一个课程。一个课程里面有多个模块,所以我有一个VM课程和课程。模块......每个都有命令。

当应用程序加载时,我将主窗口的数据上下文设置为课程,因此将课程命令绑定到功能区很容易,并且工作正常。

当用户开始使用模块时,就会遇到挑战。从列表中选择模块时,详细信息显示在另一个用户控件中。现在......我的挑战是如何将命令连接到功能区。

我假设我可以使用一些事件处理程序,以编程方式将当前模块的命令连接到功能区中的所有相关控件,并在上下文消失时删除所有内容。但这似乎是很多不必要的工作。有没有更简洁的方法呢?

我考虑过路由的命令/事件,但是有人告诉我这不会起作用,因为它们不会将所有内容冒泡到窗口并返回到功能区。

在这里寻找一些指导......我对MVVM来说是一个菜鸟(但是喜欢它!)。

1 个答案:

答案 0 :(得分:4)

想法:介绍一个作为服务公开的ShellCommands类。

public class ShellCommands : IShellCommands
{
    public ICommand SaveCommand { get; set; }
    ...
}

然后CourseViewModel和ModuleViewModel可以使用相同的服务来注册他们的命令。

public class CourseViewModel : ViewModel 
{
    public CourseViewModel(IShellCommands shellCommands, ...)
    {
        this.ShellCommands = shellCommands;
        ...
    }

    public IShellCommands ShellCommands { get; private set; }
}

在XAML中,您可以通过ShellCommands属性访问该服务。

<MenuItem Header="Save" Command="{Binding ShellCommands.SaveCommand}"/>

更多信息: WPF Application Framework (WAF)