无法检测到右键单击MVVM中的listBox

时间:2013-04-01 16:50:30

标签: c# wpf mvvm binding

我不明白为什么在使用MVVM时无法检测到我的列表框上的右键单击。 我使用事件触发器,但有些事件不起作用。

<ListBox x:Name="PlaylistsList" ItemsSource="{Binding PlaylistsList}" HorizontalAlignment="Left">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseRightButtonDown">
                <i:InvokeCommandAction Command="{Binding NewPlaylistCommand}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
</ListBox>

我的命令“NewPlaylistCommand”永远不会被调用。你可以帮帮我吗 ? 谢谢。

编辑: 我找到了解决问题的方法,我使用ContextMenu与我的ListBoxItem进行交互

<ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel x:Name="ListBox">
                    <TextBlock Text="{Binding Name}"/>
                    <StackPanel.ContextMenu>
                        <ContextMenu>
                            <MenuItem Header="Rename" Command="{Binding RenamePlaylistCommand}"/>
                            <MenuItem Header="Delete" Command="{Binding DeletePlaylistCommand}" CommandParameter="{Binding SelectedValue, ElementName=PlaylistsList}"/>
                        </ContextMenu>
                    </StackPanel.ContextMenu>
                </StackPanel>
            </DataTemplate>
</ListBox.ItemTemplate>

现在我可以右键单击我的项目来重命名或删除它。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

很可能内部的东西吞噬了你的右键单击事件,因此它没有冒泡(我怀疑它与上下文菜单行为有关)。你可以使用预告 - 事件,这些事件会以另一种方式冒泡。

您可以使用的另一个解决方案是直接将交互应用于列表框中的每个孩子(以及他们的孩子)。

但是老实说,从UI的角度来看,右键点击播放列表会创建一个新的播放列表......我希望从我多年的Windows使用情况中可以弹出一个上下文菜单,可能是一个“添加新的播放列表”menuitem。