在可重用 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中文网其他相关文章!