2011-08-09 15 views
2

コマンド(ICommand)をListViewのMouseBindingにバインドする際にいくつかの問題があります。 私は別のマウスジェスチャーをテストするために、XAMLコードのこの部分を使用:(私は一度、マウスのバインディング1をテストしている完璧なLeftClickとLeftDoubleClickジェスチャーがトリガされていないListViewがDoubleClickedのときにコマンドを実行する。 (WPF - MVVM)

<ListView.InputBindings> 
    <MouseBinding Command="{Binding OpenSOACommand}" Gesture="LeftClick" /> 
    <MouseBinding Command="{Binding OpenSOACommand}" Gesture="MiddleClick" /> 
    <MouseBinding Command="{Binding OpenSOACommand}" Gesture="LeftDoubleClick" /> 
</ListView.InputBindings> 

、まだMiddleClickマウス結合作品同じように...)。

LeftDoubleClickとMiddleClickジェスチャーの処理方法に違いはありますか?もしあれば、私のICommandをLeftDoubleClickジェスチャーにどのようにバインドできますか?

ありがとうございます!

答えて

4

ListViewのデフォルトのClickイベントは、イベントを処理済みとしてマークしています。 MouseBindingsPreviewLeftClickまたはPreviewLeftDoubleClickが含まれていないので、AttachedCommandBehaviorコードを使用してみてくださいEDIT

代わり PreviewLeftClickを使用してみてくださいと PreviewLeftDoubleClickあなたが例えば任意の Event

についてだけにCommandを添付することを可能にするhereを見つけました、

<ListView local:CommandBehavior.Event="PreviewMouseDown" 
      local:CommandBehavior.Command="{Binding OpenSOACommand}" /> 
1

あなたのListViewのListViewItemsは、あなたのLeftClickイベントを飲み込んで、すばらしいSelectionChangedイベントに変換します。 ListViewItemはMiddleClickに応答しないため、期待どおりに動作します。

イベントの一致するプレビューを処理することで、このクリックの前に表示したいことがあります。

<ListView.ItemContainerStyle> 
    <Style TargetType="ListViewItem"> 
     <EventSetter Event="MouseDoubleClick" Handler="OnItemDoubleClick"/> 
    </Style> 
</ListView.ItemContainerStyle> 

ハンドラにコマンドを呼び出す:私は私のコマンドを結合できたとき、私は本当に後ろの私のコードでイベントを処理する必要はありませんが

private void OnItemDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    OpenSOACommand.Execute(null, this); 
} 
+0

おかげで、私は、これに行くを与えますXAML自体で直接... –

+0

私は、その醜い..しかし、ListViewがコマンドを処理する前に、あなたのクリックイベントを呑み込む動作を変更することはできません。 – Arcturus

関連する問題