在可重複使用 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中文網其他相關文章!