Delegatecommand、relaycommand、routedcommandの違い 質問する

Delegatecommand、relaycommand、routedcommandの違い 質問する

コマンドパターンについて混乱しています。コマンドについてはさまざまな説明があります。以下のコードは delegatecommand だと思っていましたが、relaycommand について読んだ後、疑問に思いました。

relaycommand、delegatecommand、routedcommand の違いは何ですか。投稿したコードに関連する例で示すことは可能ですか?

class FindProductCommand : ICommand
{
    ProductViewModel _avm;

    public FindProductCommand(ProductViewModel avm)
    {
        _avm = avm;
    }

    public bool CanExecute(object parameter)
    {
        return _avm.CanFindProduct();
    }

    public void Execute(object parameter)
    {
        _avm.FindProduct();
    }

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }

}

ベストアンサー1

あなたのFindProductCommandクラスは、ICommandインターフェースとして使用できることを意味しますWPFWPF の指示これは、インターフェースの他の実装であるDelegateCommandや でもなくRelayCommand、 でもありません。RoutedCommandICommand


FindProductCommandDelegateCommand/RelayCommand

一般に、 の実装がまたは とICommand名付けられている場合、その意図は、インターフェースを実装するクラスを記述する必要はなく、必要なメソッドを/コンストラクタにパラメータとして渡すことです。DelegateCommandRelayCommandICommandDelegateCommandRelayCommand

たとえば、クラス全体ではなく、次のように記述できます。

ProductViewModel _avm;
var FindPoductCommand = new DelegateCommand<object>(
    parameter => _avm.FindProduct(),
    parameter => _avm.CanFindProduct()
);

(定型コードの節約よりもおそらく大きなもう 1 つの利点は、ビューモデル内でDelegateCommand/をインスタンス化するとRelayCommand、コマンドがそのビューモデルの内部状態にアクセスできるようになることです。)

DelegateCommand/のいくつかの実装RelayCommand:

関連している:


FindProductCommandRoutedCommand

FindProductCommandトリガーされると実行されますFindProduct

WPFの組み込みRoutedCommand何か他のことをする:それはルーティングイベントこれは、ビジュアル ツリー内の他のオブジェクトによって処理できます。つまり、 を実行するために他のオブジェクトにコマンド バインディングをアタッチし、コマンドをトリガーする 1 つ以上のオブジェクト (ボタン、メニュー項目、コンテキスト メニュー項目など) に 自体を具体的にFindProductアタッチすることができます。RoutedCommand

関連する SO の回答:

おすすめ記事