【发布时间】:2020-02-14 19:48:35
【问题描述】:
我有一个包含多个项目的 ListView。我想在系统剪贴板中复制与给定行相关的信息(例如该行中项目的 ID)。
我创建了一个 ContextMenu,它在右键单击一行时打开,它显示一个 MenuItem 来复制 id:
<ListView x:Name="MyListView" MouseDoubleClick="MyListView_MouseDoubleClick">
<ListView.Columns>
<GridViewColumn Header="Id" DisplayMemberBinding="{Binding MyItem.Id}"/>
</ListView.Columns>
<ListView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type mynamespace:MyItemDefinition}" ItemsSource="{Binding MyGroupOfItems, Mode=OneWay}" />
</ListView.ItemTemplate>
<ListView.ContextMenu>
<ContextMenu>
<MenuItem x:Name="MenuItemCopyId" Header="Copy ID" Click="MenuItemCopyId_Click"/>
</ContextMenu>
</ListView.ContextMenu>
</ListView>
和
private void MenuItemCopyId_Click(object sender, RoutedEventArgs e)
{
var menu_item = ((System.Windows.Controls.MenuItem)sender);
}
对于我阅读的内容 (ListViewItem Context Menu Get Data from ListViewItem),它需要访问项目的 DataContext。这可以通过 ContextMenu 的 PlacementTarget 来实现,但我无法做到。有什么建议吗?
提前致谢
【问题讨论】:
-
我不确定你在找什么,它只是右键单击的 MenuItem 的 DataContext 吗?如果是这样,您应该可以通过
((MenuItem)sender).DataContext获得它
标签: c# wpf listview contextmenu menuitem