我有以下情况:

public class MyCommand : ICommand
{
    MyViewModel _viewModel;

    public MyCommand(MyViewModel viewModel)
    {
        _viewModel = viewModel;
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        _viewModel.SomeMethod();
    }
}

本质上,单击按钮时,此命令将仅在ViewModel中调用一个方法。 可以执行始终返回true。

问题是,尽管通常认为这是做事的最佳方法,但它不是很优雅。这就引出了一个问题,为什么我需要一个命令来执行这个非常简单的过程。

为什么我不能直接跳过命令并直接调用该方法?

我已经考虑过这一点,并且可以看到的唯一方法是创建一个命令,在该命令中可以在按钮的 CommandParameter 属性中指定要调用的方法名称。

我希望其他人可以为这个问题提供一个优雅的解决方案。

最佳答案

您可以使用CallMethodAction中的“Blend SDK”操作从您的 View 中调用 View 模型上的方法。它看起来像这样:

<Button ...>
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="Click">
      <ei:CallMethodAction MethodName="MyMethod" TargetObject="{Binding}" />
    </i:EventTrigger>
  </i:Interaction.Triggers>
</Button>

但是,仍将使用命令用于此的最佳实践。正如Ayyappan所提到的,您可以使用MVVM Light Toolkit之类的库,因此您不必编写自己的ICommand实现。

PS:另请参阅WPF: MVVM: Command vs CallMethodAction?

关于c# - 在没有命令的情况下调用ViewModel中的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27945561/

10-11 22:44
查看更多