【发布时间】:2014-02-21 19:20:41
【问题描述】:
我的 WPF 应用程序有一个 ListBox,里面有很多项目。当用户用鼠标右键单击一个项目以打开上下文菜单时,我需要评估当前选定的项目以构建菜单项标题,告诉用户该命令会发生什么。
此命令将在项目上设置过滤器,并应提前指示生成的过滤器,该过滤器基于来自所选项目的数据。
由于我不知道有什么方法可以通过 MVVM 将 ListBox 的选定项放入视图模型中,因此我使用了后面的代码。 SelectionChanged 事件处理程序将所选项目发送到视图模型。
不幸的是,当用户点击的速度足够快时,这个选定项目列表就会过时。我经常看到以前的选择,而不是当前的。只有当我按住鼠标右键的时间足够长时,选择才是最新的。
这是我的测试应用程序的屏幕截图(如下):
问:如何可靠地获取上下文菜单标题的当前选择?
我制作了一个非常简单的测试用例,以便您重现该问题。转换器有一个短暂的延迟来模拟活动。我真正的转换器没有这个延迟,但是由于视图比较复杂,所以加载UI也需要很短的时间,效果是一样的。
这是代码:https://drive.google.com/file/d/0B8CN0ghdY1SdTW9Ka1lHc1dIUFk/edit
【问题讨论】:
标签: c# wpf mvvm listbox contextmenu