9

ユーザーがリストボックスアイテムをダブルクリックしたときに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プロパティは依存関係プロパティではないという予感がありますが、これを確認する方法がわかりません。

4

3 に答える 3

12

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

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

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

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

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

于 2012-06-23T20:30:17.793 に答える
0

ListBoxはListBoxItemのダブルクリックを処理しないようです。これは良い答えです: コマンドをリストボックスにバインドできません

于 2012-06-23T20:31:42.440 に答える
0

天気やコードビハインドがひどいことではないと主張することもできますが、コマンドを使用することは可能です。次のように、LeftDoubleClickジェスチャをItemTemplateに追加します。

<UserControl.Resources>
    <DataTemplate x:Key="BrowseTemplate" >
        <StackPanel >
            <StackPanel.InputBindings>
                <MouseBinding Gesture="LeftDoubleClick"
                              Command="{Binding DataContext.PlayVideoCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Mode=OneWay}" 
                              CommandParameter="{Binding }" />
            </StackPanel.InputBindings>
            <TextBlock Text="{Binding }" Width="50" />
        </StackPanel>
    </DataTemplate>
</UserControl.Resources>
于 2022-01-02T08:39:20.887 に答える