web-dev-qa-db-ja.com

MVVMを使用してリストボックスアイテムをダブルクリックしてコマンドを起動するにはどうすればよいですか?

ユーザーがリストボックス項目をダブルクリックしたときにICommandを起動しようとしています。また、MVVMパターンを使用してこれを実行しようとしています。

このXAMLでは、キーを押すと「p」が完全に機能します。リストボックスをダブルクリックしても、コマンドが起動しません。 「PlayVideoCommand」がダブルクリックで呼び出されないことを確認するためのブレークポイントを設定しました。私は何かが足りないのですか、それともセッター(私はよく知らない)を使用する必要がありますか?

<ListBox Name="SmallVideoPreviews" Grid.Column="1" MaxHeight="965"
    ItemsSource="{Binding BrowseVideos}" 
    ItemTemplate="{StaticResource BrowseTemplate}">
    <ListBox.InputBindings>
        <KeyBinding Key="p" 
            Command="{Binding PlayVideoCommand}"
            CommandParameter="{Binding ElementName=SmallVideoPreviews, Path=SelectedItem}"/>
        <MouseBinding Gesture="LeftDoubleClick"
            Command="{Binding PlayVideoCommand}"
            CommandParameter="{Binding ElementName=SmallVideoPreviews, Path=SelectedItem}"/>
    </ListBox.InputBindings>
</ListBox>

ダブルクリックと「p」の両方で同じコマンドを実行する必要があります。マウスを使用すると、listboxitemが選択されていることがわかります。 MouseBinding Commandプロパティは依存関係プロパティではないという予感がありますが、これを確認する方法がわかりません。

8
James

サンプルで起こっていることは、リストボックス自体がダブルクリックに反応しているということですが、リストボックスアイテムでカバーされていない領域の部分でのみです。

イベントハンドラーをlistboxitemに関連付ける必要があります。

それを行ういくつかの方法はここにあります: リストボックスアイテムをダブルクリックしてブラウザを開きます

そして、MVVMの小さなコードビハインドが必ずしもひどいものではない理由についてのいくつかの議論: MVVMを使用してWPF ListViewアイテムからダブルクリックイベントを発生させる

詳細: http://social.msdn.Microsoft.com/Forums/en-US/wpf/thread/9fb566a2-0bd6-48a7-8db3-312cd3e93340/

11
Japple