4

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

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

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

4

1 回答 1

10

我可以通过创建一个Stylefor来快速做到这一点ContextMenu,将其设置DataContextnull隐藏时。这将导致Bindings 在打开时重新运行,因为它们将有一个新的源。如果您为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>
于 2013-08-16T16:05:17.663 回答