我有一个上下文菜单,其中包含 OneTime 单向绑定和第二个非 OneTime 双向绑定到同一属性。目标是有一个颜色编辑器,它显示初始颜色值,并允许用户更改所选值,同时仍然能够将其与原始值进行比较。
这在第一次打开上下文菜单时效果很好,但菜单似乎并没有在每次打开时完全重新创建(缓存?)。相反,它“记住”原始绑定值,而不是从源执行另一个 OneTime 绑定以获取新的“初始”值。
有没有办法强制上下文菜单在每次打开时完全重新创建其内容?
我有一个上下文菜单,其中包含 OneTime 单向绑定和第二个非 OneTime 双向绑定到同一属性。目标是有一个颜色编辑器,它显示初始颜色值,并允许用户更改所选值,同时仍然能够将其与原始值进行比较。
这在第一次打开上下文菜单时效果很好,但菜单似乎并没有在每次打开时完全重新创建(缓存?)。相反,它“记住”原始绑定值,而不是从源执行另一个 OneTime 绑定以获取新的“初始”值。
有没有办法强制上下文菜单在每次打开时完全重新创建其内容?
我可以通过创建一个Style
for来快速做到这一点ContextMenu
,将其设置DataContext
为null
隐藏时。这将导致Binding
s 在打开时重新运行,因为它们将有一个新的源。如果您为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>