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

asw*_*son 3 data-binding wpf contextmenu

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

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

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

Abe*_*cht 8

我能够通过创建一个迅速做到这一点StyleContextMenu,设置其DataContextnull当它是隐藏的.这将导致Bindings在打开时重新运行,因为它们将有一个新的源.如果你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)

  • 我不得不使用IsVislble而不是IsOpen,因为我映射到MenuItems的命令没有被触发.所有看起来都很好现在我正在触发IsVisible. (2认同)