C#学习教程:确定在执行ContextMenuMenuItem时在ListView中单击了哪个ListViewItem,这些标签需要来自哪个项目的数据。我本来只是这样做的:XAML:...C#:privatevoidcmMetadata_Click(objectsender,RoutedEventArgse){//codethatneedsitemdatahere}但是我发现不能通过这种方式访问??原始的listview项目。我已经阅读了一些关于如何解决这个问题的策略,比如拦截MouseDown事件并将私有字段设置为被单击的listviewitem,但这对我不起作用,因为它似乎是一种传递数据的方式.WPF应该很容易吧?:)我读过这个问题和这个MSDN论坛问题,但我仍然不确定如何真正做到这一点,因为这些文章似乎都不适用于我的情况。有没有更好的方法将点击的项目传递给上下文菜单?谢谢!在cmMetadata_Click处理程序中,您只需查询lvResources.SelectedItem属性,因为lvResources可以从单击处理程序所在的代码隐藏文件访问。它不优雅,但它有效。如果你想更优雅,你可以改变设置ContextMenu的地方。例如,您可以尝试这样的操作:一个项目另一个项目这样做是插入ListViewItem的模板,然后您可以使用方便的TemplatedParent快捷方式将ListViewItem分配给菜单项的DataContext。现在你的代码隐藏看起来像这样:privatevoidcmMetadata_Click(objectsender,RoutedEventArgse){ListViewItemitem=menu.DataContextasListViewItem;明显的缺点是您现在需要完成ListViewItem的模板,但我相信您可以快速找到适合您需要的模板。类似于查理的回答,但不应要求更改XAML。privatevoidcmMetadata_Click(objectsender,RoutedEventArgse){MenuItemmenu=senderasMenuItem;ListViewItemlvi=lvResources.ItemContainerGenerator.ContainerFromItem(menu.DataContext)asListViewItem;所以我决定尝试实施命令解决方案。我对它现在的工作方式非常满意。首先,创建我的命令:publicstaticclassCustomCommands{publicstaticRoutedCommandDisplayMetadata=newRoutedCommand();接下来在我的自定义列表视图控件中,我添加了一个绑定到构造函数的新命令:publicSortableListView(){}此外,添加一个事件处理程序:publicvoidDisplayMetadataExecuted(objectsender,ExecutedRoutedEventArgse){varnbSelectedItem)=(MyParameterm;//dostuffwithselecteditem}publicvoidDisplayMetadataCanExecute(objectsender,CanExecuteRoutedEventArgse){e.CanExecute=true;e.Handled=true;}我使用样式选择器动态地将样式分配给列表视图项,所以我不必在xaml中执行此操作,而必须在代码隐藏中设置绑定。您也可以在xaml中执行此操作:publicoverrideStyleSelectStyle(objectitem,DependencyObjectcontainer){MyItemselectedItem=(MyItem)item;Styles=newStyle();varlistMenuItems=new列表();varmi=newMenuItem();mi.Header="获取元数据";mi.Name="cmMetadata";mi.Command=CustomCommands.DisplayMetadata;mi.CommandParameter=selectedItem;listMenuItems.Add(mi);上下文菜单cm=new上下文菜单();cm.ItemsSource=listMenuItems;//全局样式s.Setters.Add(newSetter(Control.ContextMenuProperty,cm));//其他样式选择代码returns;我喜欢这个解决方案感觉比尝试在鼠标点击时设置字段并尝试访问以这种方式点击的内容要好得多。以上就是C#学习教程:判断在执行ContextMenuMenuItem时在ListView中点击了哪个ListViewItem。分享的所有内容,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络收藏,不代表立场,如涉及侵权,请谅解点击右侧联系管理员删除。如需转载请注明出处:
