4

OneTime の一方向バインディングと、同じプロパティへの OneTime 以外の 2 番目の双方向バインディングの両方を含むコンテキスト メニューがあります。目標は、初期の色の値を表示し、ユーザーが選択した値を変更しながら元の値と比較できるようにするカラー エディターを用意することです。

これは、コンテキスト メニューを初めて開いたときにうまく機能しますが、メニューを開くたびにメニューが完全に再作成されないようです (キャッシュされていますか?)。代わりに、ソースから別の OneTime バインディングを実行して新しい「初期」値を取得する代わりに、元のバインディング値を「記憶」します。

コンテキスト メニューが開かれるたびにその内容を完全に再作成するよう強制する方法はありますか?

4

1 に答える 1

10

非表示のときにを設定するを作成することStyleで、これをすばやく行うことができました。これにより、新しいソースがあるため、開いたときに s が再実行されます。に対して明示的にを設定する場合は、それをセッターに移動する必要があります。ContextMenuDataContextnullBindingDataContextContextMenu

<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 に答える