ホームページ >バックエンド開発 >C++ >再利用可能な MVVM コマンドに対する最良のアプローチは汎用 ICommand または RelayCommand のどちらですか?

再利用可能な MVVM コマンドに対する最良のアプローチは汎用 ICommand または RelayCommand のどちらですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-20 17:30:11210ブラウズ

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

再利用可能な MVVM 構造にコマンドを実装する

最近の MVVM 実装では、複数のコマンドが必要になりました。単一の ICommand クラスを作成する退屈なプロセスを軽減するために、別のアプローチが考案されました。ただし、その有効性と潜在的な改善についてはまだ議論されていません。

提案されたソリューション: Generic ICommand

コマンド作成を統合するために、デリゲートを使用して実行可能関数を実行および実装する汎用 ICommand クラスが導入されています。この ICommand のコンストラクターでは、2 つのデリゲート メソッドが割り当てられています。続いて、ICommand メソッドはデリゲート メソッドを呼び出します。

機能は動作しますが、このアプローチがベスト プラクティスと一致しているかどうか、またはより適切なソリューションが存在するかどうかという疑問が生じます。

代替案: RelayCommand

Karl Shifflet が示したように、強く推奨される方法の 1 つは 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 アプローチについてさらに詳しく説明されています。

以上が再利用可能な MVVM コマンドに対する最良のアプローチは汎用 ICommand または RelayCommand のどちらですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。