asw*_*son 3 data-binding wpf contextmenu
我有一个上下文菜单,其中包含OneTime,单向绑定和第二个非OneTime双向绑定到同一属性.目标是使用颜色编辑器显示初始颜色值,并允许用户更改所选值,同时仍能将其与原始颜色进行比较.
这在第一次打开上下文菜单时效果很好,但是每次打开菜单(缓存?)时菜单似乎都没有完全重新创建.相反,它"记住"原始绑定值,而不是从源执行另一个OneTime绑定以获取新的"初始"值.
有没有办法强制上下文菜单在每次打开时完全重新创建其内容?
我能够通过创建一个迅速做到这一点Style
的ContextMenu
,设置其DataContext
到null
当它是隐藏的.这将导致Binding
s在打开时重新运行,因为它们将有一个新的源.如果你DataContext
明确地设置了ContextMenu
,你必须将它移动到一个setter:
<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>
Run Code Online (Sandbox Code Playgroud)