WPF: los elementos de menú solo vinculan los parámetros de comando una vez
He notado esto un par de veces al usar menús con comandos, no son muy dinámicos, mira esto. Estoy creando un menú a partir de una colección de colores, lo uso para colorear una columna en una cuadrícula de datos. De todos modos, cuando abro el menú por primera vez (es un menú contextual), se produce el enlace del parámetro de comando y se une a la columna en la que se abrió el menú contextual. Sin embargo, la próxima vez que lo mencione, parece que wpf almacena en caché el menú y no vuelve a vincular el parámetro de comando. así que puedo configurar el color solo en la columna inicial en la que apareció el menú contextual.
He superado esta situación en el pasado al hacer que el menú sea totalmente dinámico y destruir la colección cuando el menú se cerró y forzar una reconstrucción la próxima vez que se abrió, no me gusta este truco. Alguien tiene una mejor manera?
<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>