43

WPFのイベントを介してコマンドを呼び出すことは可能ですか?

押すとコマンドを呼び出す保存ボタンがあります。これは、テキストボックスの編集が終了したときに押され、コマンドパラメータとしてオブジェクトも渡します。

 <Button Content="Save"  Command="{Binding DataContext.SaveQueueTimeCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}" CommandParameter="{Binding}" />

理想的には、このコマンドを呼び出して、テキストボックスがフォーカスを失ったときに、ボタンを押すのではなく、次のようにオブジェクトをパラメーターとして渡します。

 <Button LostFocus="{Binding SaveQueueTimeCommand}" />

そして、それでもどういうわけか、オブジェクトをパラメータとして渡します。MVVMパターンを使用しているので、コードビハインドを使用せずにこれを達成する方法はありますか?

御時間ありがとうございます

4

4 に答える 4

76

これを行う最も簡単な方法は、対話トリガーを使用することです。

<Grid xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SomeEvent">
            <i:InvokeCommandAction Command="{Binding Path=SomeCommand, Mode=OneWay}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Grid>

後世のためにこれを追加しました。

于 2014-02-21T18:45:13.007 に答える
16

アタッチされた動作を使用してこれを実現できます。Marlon GrechAttached Command Behaviorsライブラリを作成して、この問題を解決しました。使用法は次のようになります。

<Grid>
    <local:CommandBehaviorCollection.Behaviors>
        <local:BehaviorBinding Event="MouseRightButtonDown" Command="{Binding SomeCommand}" CommandParameter="A Command on MouseRightButtonDown"/>
    </local:CommandBehaviorCollection.Behaviors>
</Grid>
于 2009-06-26T12:06:54.033 に答える
3

残念ながら、あなたがやりたいことは不可能だと思います。コマンドはデリゲートではないため、イベントまでコマンドを記述することはできません。Button.LostFocusイベントを処理してから、ハンドラーからコマンドを手動で実行するのが最善の方法だと思います。

MVVM を使用する場合、コードをコード ビハインドに配置しても問題はありません。最小限に抑えて、関連するタスクのみを表示するコードを保持するのが最善です。このコード ビューを関連と呼ぶので、コードをコード ビハインドに入れることがわかります。

于 2009-06-26T11:06:12.083 に答える
2
<Grid MouseRightButtonDown ="{eb:EventBinding Command=SomeCommand, CommandParameter=$e}">

</Grid>

指示

{eb:EventBinding} (Simple naming pattern to find Command)

{eb:EventBinding Command=CommandName}

CommandParameter

$e (EventAgrs) 

$this or $this.Property

string

https://github.com/JonghoL/EventBindingMarkup

于 2014-11-20T02:39:37.947 に答える