WPF: itens de menu vincular parâmetros de comando apenas uma vez
Eu notei isso algumas vezes ao usar menus com comandos, eles não são muito dinâmicos, verifique isso. Estou criando um menu a partir de uma coleção de cores, uso-o para colorir uma coluna em um datagrid. De qualquer forma, quando eu mostro o menu (é um menu de contexto), a ligação do parâmetro de comando acontece e ela se liga à coluna na qual o menu de contexto foi aberto. No entanto, na próxima vez em que aparecer, parece que o wpf armazena em cache o menu e ele não religa o parâmetro de comando para que eu possa definir a cor apenas na coluna inicial em que o menu de contexto apareceu.
Eu já havia contornado essa situação no passado, tornando o menu totalmente dinâmico e destruindo a coleção quando o menu foi fechado e forçando uma reconstrução na próxima vez em que foi aberto, não gosto desse truque. alguém tem uma maneira melhor?
<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>