我有一个上下文菜单,其中包含OneTime,单向绑定和第二个非OneTime双向绑定到同一属性。目标是使用颜色编辑器显示初始颜色值,并允许用户更改所选值,同时仍能将其与原始颜色进行比较。
这在第一次打开上下文菜单时效果很好,但是每次打开菜单(缓存?)时菜单似乎都没有完全重新创建。相反,它“记住”原始绑定值,而不是从源执行另一个OneTime绑定以获取新的“初始”值。
有没有办法强制上下文菜单在每次打开时完全重新创建其内容?
答案 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}}