首页 > 解决方案 > 有什么方法可以避免实现 ICommand 以在 MVVM 中使用 Button?

问题描述

我正在开发一个非常简单的应用程序,一个带有几个按钮的视图。我想可以使用视图模型中按钮的单击事件。

但是我只找到了需要使用 blend 中的 Interactivity.dll 的示例,或者我必须实现 ICommand 接口或其他一些解决方案。

我想知道现在是否有任何解决方案不需要实现 ICommand 或使用像 MVVM Light 这样的框架。我想使用最简单的解决方案。

谢谢。

标签: c#wpfmvvm

解决方案


为什么要避免使用 ICommand?

您可以编写自己的 ICommand 实现,但当 MVVM Light 拥有所有工具且易于使用时,这是不必要的。

如果您的应用程序如此简单,您的选择是:

  1. 忽略 MVVM 模式,只在后面的代码中实现事件处理程序

  2. (我建议)将 MVVM Light 与默认的 ICommand 实现一起使用

    公共 RelayCommand ExampleRelayCommand => new RelayCommand(ExampleMethod);

    private void ExampleMethod()
    {
    
    }
    
  3. 如果你想要 EventArgs,那么你可以使用 PassEventArgsToCommand="True" 实现交互触发器和 EventToCommand,也可以使用 MVVM Light

        public RelayCommand<RoutedEventArgs> EventRelayCommand => new RelayCommand<RoutedEventArgs>(EventRelayCommandMethod);
    
    private void EventRelayCommandMethod(RoutedEventArgs e)
    {
    
    }
    

然后,在 XAML 中的按钮内:

<Button Grid.Column="0" Content="Example"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <command:EventToCommand Command="{Binding EventRelayCommand}" PassEventArgsToCommand="True" /> </i:EventTrigger> </i:Interaction.Triggers> </Button>


推荐阅读