首页 >后端开发 >C++ >通用 ICommand 或 RelayCommand 是可重用 MVVM 命令的最佳方法吗?

通用 ICommand 或 RelayCommand 是可重用 MVVM 命令的最佳方法吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-20 17:30:11270浏览

Is a Generic ICommand or RelayCommand the Best Approach for Reusable MVVM Commands?

在可重用 MVVM 结构中实现命令

在最近的 MVVM 实现中,出现了对多个命令的需求。为了减轻创建单个 ICommand 类这一繁琐过程,设计了一种替代方法。然而,其有效性和潜在改进之处尚待讨论。

提出的解决方案:泛型 ICommand

为了整合命令创建,引入了一个泛型 ICommand 类,利用委托来执行和实现可执行功能。在这个 ICommand 的构造函数中,分配了两个委托方法。随后,ICommand 方法调用委托方法。

虽然功能有效,但这引发了一个问题,即这种方法是否符合最佳实践,或者是否存在更合适的解决方案。

一种替代方案:RelayCommand

正如 Karl Shifflet 所示,一种强烈推荐的方法是 RelayCommand。它定义了一个在调用时执行的操作。

RelayCommand 的示例实现:

<code class="language-csharp">public class RelayCommand : ICommand
{
    private readonly Predicate<object> _canExecute;
    private readonly Action<object> _execute;

    public RelayCommand(Predicate<object> canExecute, Action<object> execute)
    {
        _canExecute = canExecute;
        _execute = execute;
    }

    // ICommand 实现...

}</code>

此实现简化了命令创建,如下例所示:

<code class="language-csharp">public class MyViewModel
{
    public ICommand DoSomethingCommand =>
        new RelayCommand(
            p => this.CanDoSomething(),
            p => this.DoSomeImportantMethod());
}</code>

其他资源:

• Josh Smith 的“模式 - 使用 MVVM 设计模式的 WPF 应用程序”提供了对 RelayCommand 方法的进一步见解。

以上是通用 ICommand 或 RelayCommand 是可重用 MVVM 命令的最佳方法吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn