2

Mvvmlightについて少し混乱していRelayCommandます。EventToCommandEventToCommand処理し、EventTrigger仕事RelayCommandをするようです。そのような:

 <i:Interaction.Triggers>
        <i:EventTrigger x:Uid="i:EventTrigger_1" EventName="MouseLeftButtonUp">
            <cmd:EventToCommand x:Uid="cmd:EventToCommand_1" Command="{Binding Form_MouseLeftButtonUpCommand}" PassEventArgsToCommand="True"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>

私の理解は正しいですか?

では、 を使用する必要はなく、をRelayCommand直接使用できますか?EventTriggerEventToCommand

ご協力いただきありがとうございます!

4

2 に答える 2

4

EventToCommandカスタム動作です。最初はExpression Blendチームによって提供され、現在はWPF 4の一部です。WPF4 を使用していない場合。ここから Blend SDK が必要です。

動作は、機能を再利用可能なコンポーネントとしてカプセル化します。これらは、機能がデフォルトで存在しない場合に使用されます。たとえば、Label、Combobox などにコマンド サポートを追加します。

RelayCommand を EventTrigger で直接使用できますか? EventToCommand を使用する必要はありませんか?

No.RelayCommandは、カスタム コマンドを定義するためのコードの冗長性を回避するためのショートカットICommandです。Prism ライブラリに似ています。Execute(T)CanExecute(T)DelegateCommand

<cmd:EventToCommand x:Uid="cmd:EventToCommand_1" Command="{Binding Form_MouseLeftButtonUpCommand}" PassEventArgsToCommand="True"/>

上記の行cmd:EventToCommandは、基になるコントロールへの追加機能です。Form_MouseLeftButtonUpCommandそれがCommand実行されます。このコマンドは、 としてカプセル化できますRelayCommand

于 2013-01-02T04:20:15.807 に答える
1

有用な回答をありがとうティラック。

Tilakさんの説明で、イベントハンドラーにバインディング( Button GotFocus="{Binding DoJob}"など)を入れるなどめちゃくちゃにしました --> ビルドに失敗し、このようなイベントハンドラーはバインディングをサポートしていないことがわかりました。Command でのみバインドできます ( Button Command="{Binding DoJob}" /> などの場合、デフォルト イベントはこの状況で呼び出されます。ボタンでは、Click イベントである必要があります)。ばかげたことをすると、人生をより理解するのに役立ちます - 笑

RelayCommand を EventTrigger で直接使用できますか? EventToCommand を使用する必要はありませんか?

実際、私は EventToCommand を使用しないつもりであり、その解決策を見つけました: 代わりに InvokeCommandAction を使用します (System.Windows.Interactivity に属します - Mvvm-light もこのアセンブリを参照します)。

于 2013-01-02T08:27:57.490 に答える