2009-06-26 15 views
26

WPFでイベント経由でコマンドを呼び出すことはできますか?WPFがイベント経由でコマンドを呼び出す

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

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

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

そして、まだ何とかパラメータとしてオブジェクトを渡します。このコマンドを呼び出すと、テキストボックスではなく、ボタンを押さよりも、フォーカスを失ったときに、パラメータとしてオブジェクトを渡す、のようなものです。 が、私はMVVMパターンを使用していて背後にあるコードを使用せずにこれをacheiveするための方法ですお時間

おかげ

答えて

2

私が何をやりたいが可能であるとは思わないんです。コマンドはデリゲートではないため、イベントまでコマンドを書き込むことはできません。私はあなたの最良の選択肢は、Button.LostFocusイベントを処理し、ハンドラから手動でコマンドを実行することだと思います。

MVVMを使用しているときにコードにコードを入れても問題はありませんが、MVMSを最小化して関連するタスクのみを表示するようにしてください。このコードビューは関連していると思いますので、コードをコードの背後に置くことができます。

+0

うんそれは理にかなって、あなたの時間に感謝:) –

+0

最終的には、他の答えは、それが可能であることを明らかに示した(実際には直接ではないが)。 – SRKX

15

これを実現するには、接続された動作を使用できます。 Marlon Grechは、問題を解決するためにAttached Command Behaviorsライブラリを作成しました。使用法は次のようになります。

<Grid> 
    <local:CommandBehaviorCollection.Behaviors> 
     <local:BehaviorBinding Event="MouseRightButtonDown" Command="{Binding SomeCommand}" CommandParameter="A Command on MouseRightButtonDown"/> 
    </local:CommandBehaviorCollection.Behaviors> 
</Grid> 
56

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

<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> 

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

+0

これは素晴らしいです。情報をありがとう。 – Magus

+5

http://schemas.microsoft.com/expression/2010/interactivityは、Blend SDKに含まれているSystem.Windows.Interactivity.dllにあります。 – PeterM

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

関連する問題