在MVVM中组织命令和ViewModel

时间:2013-05-29 21:48:37

标签: c# wpf mvvm

目前我的项目中有2个ViewModel。 MainViewModel当前绑定到我的WPF窗口,所以我在其他ViewModel(AdventurerViewModel)中有一个命令,不再触发。有没有办法在没有绑定ViewModel的情况下触发该命令,或者我的所有命令都需要在MainViewModel中?是否有一种很好的方法可以组织命令,可以帮助我避免将来出现这种情况?任何建议都将不胜感激。

编辑:一些代码

来自我的XAML

Button Grid.Column =“3”Grid.Row =“1”Content =“IncreaseLevel”Command =“{Binding IncreaseLevel}”

AdventurerViewModel.cs

public ICommand IncreaseLevel { get { return new RelayCommand(IncreaseLevelExecute, CanIncreaseLevelExecute); } }

    private bool CanIncreaseLevelExecute()
    {
        return true;
    }

    private void IncreaseLevelExecute()
    {
        Level++;
    }

2 个答案:

答案 0 :(得分:1)

首先确保正确拆分ViewModel并将命令放在正确的ViewModel中。

之后,您可能仍希望在当前ViewModel中通知其他ViewModel更改。在这种情况下,您可以查看ViewModel之间的消息传递系统,以便ViewModel可以订阅特定事件并对其进行响应。

答案 1 :(得分:0)

每个视图使用一个ViewModel。如果您使用Window,那么您应该使用一个ViewModel。现在在我的项目中有一个Window,其中有2个用户控件,每个UserControl都有自己的ViewModel和Window的ViewModel。我可以将所有内容放在一个ViewModel中,但这样更干净,但对于您的示例,我建议您将所有内容放在一个ViewModel中。它实际上取决于情况或项目要求。