Я заметил это несколько раз при использовании меню с командами, они не очень динамичны, проверьте это. Я создаю меню из коллекции цветов, я использую его для цветной колонки в datagrid. В любом случае, когда я сначала вывожу меню (его контекстное меню), происходит привязка параметра команды и привязывается к столбцу, в котором было открыто контекстное меню. Однако в следующий раз, когда я его подниму, кажется, что 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>