我有以下情况:
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/