强制上下文菜单在每次打开时重新创建子控件

时间:2013-08-16 15:38:59

标签: wpf data-binding contextmenu

我有一个上下文菜单,其中包含OneTime,单向绑定和第二个非OneTime双向绑定到同一属性。目标是使用颜色编辑器显示初始颜色值,并允许用户更改所选值,同时仍能将其与原始颜色进行比较。

这在第一次打开上下文菜单时效果很好,但是每次打开菜单(缓存?)时菜单似乎都没有完全重新创建。相反,它“记住”原始绑定值,而不是从源执行另一个OneTime绑定以获取新的“初始”值。

有没有办法强制上下文菜单在每次打开时完全重新创建其内容?

1 个答案:

答案 0 :(得分:8)

我能够通过为Style创建一个ContextMenu来快速执行此操作,该DataContext会在隐藏时将null设置为Binding。这将导致DataContext在打开时重新运行,因为它们将有新的来源。如果您为ContextMenu明确设置<ContextMenu> <ContextMenu.Style> <Style TargetType="{x:Type ContextMenu}"> <Style.Triggers> <Trigger Property="IsOpen" Value="False"> <Setter Property="DataContext" Value="{x:Null}" /> </Trigger> </Style.Triggers> </Style> </ContextMenu.Style> <MenuItem Header="{Binding Color, Mode=OneTime}" /> </ContextMenu> ,则必须将其移至设置器:

{{1}}