2010-07-29 3 views
2

J'ai passé une bonne partie de ma journée à faire des recherches sur cette propriété; Je suis curieux de savoir s'il est possible de faire une liaison simple dans XAML, sans avoir besoin d'implémenter INotifyPropertyChanged dans le code derrière. Ironiquement, dans le temps que j'ai passé à faire des recherches, je l'aurais fait dans le code 5 fois plus.Liaison de la propriété MenuItem (IsEnabled) à la propriété combobox (SelectedIndex) dans le même contrôle

Je suis tombé sur quelques articles qui suggèrent d'utiliser DataTriggers (pour les éléments de menu, le DataTrigger doit être dans le style a Trigger). J'ai essayé ceci, mais cela ne fonctionne pas sans erreur.

Je soupçonne que le DataTrigger n'a pas pu trouver la liste déroulante en raison de problèmes de portée MenuItem, que j'ai lus dans un thread différent.

Quelqu'un a des suggestions?

Code: (pas de construction ou erreurs d'exécution, mais la propriété non mis à jour)

<ContextMenu> 
<MenuItem Header="Do Something Neat" x:Name="MyMenuItem" Click="MyMenuItem_Click"> 
    <MenuItem.Style> 
     <Style TargetType="{x:Type MenuItem}"> 
      <Style.Triggers> 
       <Setter Property="IsEnabled" Value="True" /> 
       <DataTrigger Binding="{Binding ElementName=MyComboBox, Path=SelectedIndex}" Value="-1"> 
        <Setter Property="IsEnabled" Value="False" /> 
       </DataTrigger>           
      </Style.Triggers> 
     </Style> 
    </MenuItem.Style> 
</MenuItem> 
</ContextMenu> 

Répondre

1

je me suis déplacé le setter par défaut avant Style.Triggers (à cause d'une erreur de compilation), tout mettre en Menu (pour simplifier la exemple) et le fait déclencher sur l'index 0 (pour mieux démontrer le résultat). Les travaux suivants:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <DockPanel LastChildFill="False"> 
     <Menu Height="23" DockPanel.Dock="Top" > 
      <MenuItem Header="Do Something Neat"> 
       <MenuItem.Style> 
        <Style TargetType="{x:Type MenuItem}"> 
         <Setter Property="IsEnabled" Value="True" /> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding ElementName=MyComboBox, Path=SelectedIndex}" Value="0"> 
           <Setter Property="IsEnabled" Value="False" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </MenuItem.Style> 
      </MenuItem> 
     </Menu> 
     <ComboBox Name="MyComboBox" Height="23" Width="120" DockPanel.Dock="Top" > 
      <ComboBoxItem >Index0</ComboBoxItem> 
      <ComboBoxItem >Index1</ComboBoxItem> 
     </ComboBox> 
    </DockPanel> 
</Window> 
Questions connexes