2016-07-21 30 views
0

Ich kann nicht herausfinden, wie dies zu tun, und man würde denken, es wäre ziemlich einfach.Ändern MenuItem Header und Symbol auf Viewmodel Eigenschaft Bindung

Ich habe eine MenuItem, die Teil einer ContextMenu ist. Ich habe eine binding zu einer booleschen Eigenschaft in einem Viewmodel. Abhängig vom Status dieser Eigenschaft möchte ich den Kopftext und das Symbol der MenuItem ändern.

Ich könnte sicherlich eine IValueConverter dafür verwenden, aber ich bin mir sicher, dass es eine elegantere Lösung mit einem DataTemplate und Triggern gibt. Ich kann einfach nicht das richtige Markup herausfinden.

Der Code ich arbeitete (unten abgeschnitten) hat zwei Probleme: eine der HeaderTemplate scheint nicht das Symbol zu enthalten, so was wäre der MenuItems 's Text enthält auch das Symbol (normalerweise erscheint das Symbol auf in linker Abschnitt - siehe Bild und vergleichen Sie mit den Menüpunkten Kopieren und Löschen. Darüber hinaus löst das Klicken auf MenuItem nicht die DataTemplate Änderungen aus (beachten Sie, dass der Befehl funktioniert, die Viewmodel-Bindung schaltet tatsächlich den True/False-Status um).

<ContextMenu> 
      <MenuItem Command="{Binding Source={x:Static cmd:Commands.PauseCommand}}" 
         CommandParameter="{Binding}"> 
       <MenuItem.HeaderTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal"> 
          <Image x:Name="img" Source="../Icons/pause.png"/> 
          <TextBlock x:Name="txt" Text="Pause"/> 
         </StackPanel> 
         <DataTemplate.Triggers> 
          <DataTrigger Binding="{Binding IsPaused}" Value="True" > 
           <Setter Property="Image.Source" Value="../Icons/play.png" TargetName="img"/> 
           <Setter Property="Text" Value="Play" TargetName="txt"/> 
          </DataTrigger> 
         </DataTemplate.Triggers> 
        </DataTemplate> 
       </MenuItem.HeaderTemplate> 
      </MenuItem> 

MenuItem

+0

Wenn Sie nach unten abstimmen, geben Sie bitte einen Grund an. –

+0

Ich bin nicht der downvoter, aber einige Schnipsel könnten helfen – lokusking

+0

Ich denke, ich suche nach einem allgemeinen Beispiel einer Datatemplate, die die angeforderte Funktion ausführen kann (d. H. Eine Menüvorlage, die Symbol und Header basierend auf Modelleigenschaft ändert). –

Antwort

2

Sie mögen das bedeuten? Machen Sie die Dinge nicht härter als sie sind;)

<ContextMenu> 
         <MenuItem Command="{Binding Source={x:Static cmd:Commands.PauseCommand}}" 
        CommandParameter="{Binding}"> 
          <MenuItem.Style> 
           <Style TargetType="MenuItem"> 
            <Setter Property="Icon" Value="../Icons/play.png>"></Setter> 
            <Style.Triggers> 
             <DataTrigger Binding="{Binding IsPaused, Mode=OneWay}" Value="True"> 
              <Setter Property="Icon" Value="../Icons/pause.png"></Setter> 
             </DataTrigger> 
            </Style.Triggers> 
           </Style> 
          </MenuItem.Style> 
         </MenuItem> 
        </ContextMenu> 
+0

Vertrau mir, ich möchte die Dinge nicht härter machen. :(Danke, funktioniert perfekt. –