コマンドでメニューを使用しているときに、これに数回気づきました。これらはあまり動的ではありません。これを確認してください。色のコレクションからメニューを作成しています。それを使用してデータグリッドの列に色を付けています。とにかく、最初にメニュー(コンテキストメニュー)を表示すると、コマンドパラメーターのバインドが発生し、コンテキストメニューが開かれた列にバインドされます。ただし、次回起動すると、wpfがメニューをキャッシュしているようで、コマンドパラメーターを再バインドしません。そのため、コンテキストメニューが表示された最初の列にのみ色を設定できます。
メニューを完全に動的にして、メニューを閉じたときにコレクションを破棄し、次に開いたときに強制的に再構築することで、過去にこの状況を回避しました。このハックは好きではありません。誰かがより良い方法を得ましたか?
<MenuItem
Header="Colour"
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:ResultEditorGrid}}, Path=ColumnColourCollection}"
ItemTemplate="{StaticResource colourHeader}" >
<MenuItem.Icon>
<Image
Source="{StaticResource ColumnShowIcon16}" />
</MenuItem.Icon>
<MenuItem.ItemContainerStyle>
<Style
TargetType="MenuItem"
BasedOn="{StaticResource systemMenuItemStyle}">
<!--Warning dont change the order of the following two setters
otherwise the command parameter gets set after the command fires,
not mush use eh?-->
<Setter
Property="CommandParameter">
<Setter.Value>
<MultiBinding>
<MultiBinding.Converter>
<local:ColumnAndColourMultiConverter/>
</MultiBinding.Converter>
<Binding RelativeSource="{RelativeSource AncestorType={x:Type DataGridColumnHeader}}" Path="Column"/>
<Binding Path="."/>
</MultiBinding>
</Setter.Value>
</Setter>
<Setter
Property="Command"
Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:ResultEditorGrid}}, Path=ColourColumnCommand}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>