我有以下上下文菜单:
<ListBox x:Name="sectionList" Margin="56,8,15,0" FontSize="64" SelectionChanged="SectionList_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<toolkit:MenuItem Header="Hide this section from this list" Click="ContextMenuItem_Click" />
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
<TextBlock Text="{Binding DisplayName}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
如您所见,每个显示的项目都有自己的上下文菜单。每个上下文菜单都连接到同一个事件处理程序:
private void ContextMenuItem_Click(object sender, RoutedEventArgs e)
{
}
通过此方法,如何判断单击了哪个上下文菜单?我想知道相应DataContext
的{{1}}是什么。
答案 0 :(得分:4)
您可以通过将发件人转换为FrameworkElement
来获取ListBoxItem绑定的项目,以便访问DataContext
:
(sender as FrameworkElement).DataContext
然后,您可以将其转换为相应的模型类并访问所需的详细信息。 e.g:
((sender as FrameworkElement).DataContext as ItemViewModel).DisplayName
答案 1 :(得分:1)
如果在事件处理程序ContextMenuItem_Click,
中放置断点,则可以检查sender
和e
的属性。你可能会在那里找到答案。
执行此操作的一种方法是将鼠标悬停在这些单词上。另一种方法是使用立即窗口。输入sender
和一个点以获得智能感知。
答案 2 :(得分:1)
如果您使用<StackPanel Tag="{Binding}">
,那么((FrameworkElement)sender).Tag
将返回DataContext对象(当然,您必须在使用前将其强制转换)。