【ContextMenu】DataContext不自动更新

参考资料

http://www.orcode.com/article/Presentation_20147076.html 

   

问题现象

通过绑定集合至ContextMenu的ItemsSource的方式动态生成右键菜单,但是集合数据已经更新了,实际看到的菜单却还会原来的,操作执行的对象以及结果也还是原来的。

已经不止一次遇到,由于WPF本身的缺陷导致绑定无效产生的问题,如RadioButton的IsChecked,还有这里提到的ContextMenu。

   

分析问题

参考资料中提到:

ContextMenu类不是WPF可视化树的一部分,尽管如此,ContextMenu能够获得它的父控件的DataContext。问题是,获取只发生一次。

如果父进程的数据环境的变化,在以后的时间,在ContextMenu的数据上下文将不会被更新。

如果上下文菜单绑定到变量的东西,像一个ListBox选定的项目,这将导致问题。

   

解决问题

解决方法是,DataContext"显式绑定"菜单上的数据上下文:

<ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}" >

posted @ 2013-10-21 15:27  peony007  阅读(1334)  评论(1编辑  收藏  举报