WPF: Menüelemente binden Befehlsparameter nur einmal

Ich habe das ein paar Mal bemerkt, wenn ich Menüs mit Befehlen verwende. Sie sind nicht sehr dynamisch. Schauen Sie sich das an. Ich erstelle ein Menü aus einer Sammlung von Farben und benutze es, um eine Spalte in einem Datagrid einzufärben. Wie auch immer, wenn ich das Menü zum ersten Mal aufrufe (es ist ein Kontextmenü), geschieht die Befehlsparameterbindung und sie bindet an die Spalte, in der das Kontextmenü geöffnet wurde. Jedoch wenn ich es das nächste Mal aufrufe, scheint es, dass wpf das Menü zwischenspeichert und es den Befehlsparameter nicht neu bindet. so kann ich die Farbe nur auf der Anfangsspalte einstellen, auf der das Kontextmenü erschien.

Ich habe diese Situation in der Vergangenheit umgangen, indem ich das Menü total dynamisch gemacht und die Sammlung zerstört habe, als das Menü geschlossen wurde, und beim nächsten Öffnen einen Neuaufbau erzwungen habe. Ich mag diesen Hack nicht. Hat jemand einen besseren Weg?

    <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>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage