我正在尝试使用列表视图中的上下文菜单来运行一些代码,这些代码需要它来自哪个项目的数据。
我最初只是这样做:
XAML:
<ListView x:Name="lvResources" ScrollViewer.VerticalScrollBarVisibility="Visible">
<ListView.Resources>
<ContextMenu x:Key="resourceContextMenu">
<MenuItem Header="Get Metadata" Name="cmMetadata" Click="cmMetadata_Click" />
</ContextMenu>
</ListView.Resources>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="ContextMenu" Value="{StaticResource resourceContextMenu}" />
</Style>
</ListView.ItemContainerStyle>
...
C#:
private void cmMetadata_Click(object sender, RoutedEventArgs e)
{
// code that needs item data here
}
但我发现原始列表视图项无法以这种方式访问。
我已经阅读了一些有关如何解决此问题的策略,例如拦截 MouseDown 事件并为单击的 listviewitem 设置一个私有字段,但这并不适合我,因为传递数据似乎有点棘手方式。WPF 应该很简单,对吧?:) 我已经阅读了这个SO question和这个MSDN forum question,但我仍然不确定如何真正做到这一点,因为这些文章似乎都不适用于我的情况。有没有更好的方法将单击的项目传递到上下文菜单?
谢谢!