【问题标题】:Organizing Commands and ViewModels in MVVM在 MVVM 中组织命令和视图模型
【发布时间】:2013-05-29 21:48:36
【问题描述】:

目前我的项目中有 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++;
    }

【问题讨论】:

  • 听起来您正在尝试为一个视图创建多个视图模型,而您并不想这样做。看看这个答案的标准方法stackoverflow.com/questions/5252339/…
  • 是的,看起来就是这个问题。那我得重新整理一下。

标签: c# wpf mvvm


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-06-09
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 2011-12-30
      • 2010-11-28
      • 2010-12-07
      相关资源
      最近更新 更多