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