2017-03-16 1 views
0

Je dois créer un menu contextuel pour un élément de menu. La visibilité du menu contextuel est liée au ViewModel. Lorsque la propriété est définie sur true à l'aide de MVVM Light, le menu contextuel apparaît dans l'interface utilisateur même s'il n'y a pas de clic droit sur l'élément de menu. Que puis-je faire pour masquer le menu contextuel lorsque la valeur est false, et le laisser visible uniquement à l'aide du clic droit?ContextMenu de Liaison de visibilité MenuItem

private Boolean _IsEditable; 
public Boolean IsEditable 
{ 
    get { return _IsEditable; } 
    set 
    { 
     if (_IsEditable == value) return; 
     _IsEditable = value; 
     RaisePropertyChanged("IsEditable"); 
    } 
} 

<Menu DockPanel.Dock="Top"> 
    <MenuItem Header="{Binding Menu.Business}" Visibility="{Binding allowUI, Converter={StaticResource BoolToVisConverter} }"> 
     <MenuItem.ContextMenu> 
     <ContextMenu Visibility="{Binding Menu.IsEditable, Converter={StaticResource BoolToVisConverter} }"> 
      <MenuItem> 
       <MenuItem.Header> 
        <TextBox Text="{Binding Menu.Business, UpdateSourceTrigger=PropertyChanged}" LostFocus="end_change_UI" /> 
       </MenuItem.Header> 
      </MenuItem> 

     </ContextMenu> 
     </MenuItem.ContextMenu> 
    </MenuItem> 
</Menu> 

Répondre

0

Vous pouvez appliquer une Style au MenuItem qui définit seulement la propriété ContextMenu lorsque la propriété source IsEditable est définie sur true:

<Menu DockPanel.Dock="Top"> 
    <MenuItem Header="{Binding Menu.Business}" Visibility="{Binding allowUI, Converter={StaticResource BoolToVisConverter} }"> 
     <MenuItem.Style> 
      <Style TargetType="MenuItem" BasedOn="{StaticResource {x:Type MenuItem}}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Menu.IsEditable}" Value="True"> 
         <Setter Property="ContextMenu"> 
          <Setter.Value> 
           <ContextMenu> 
            <MenuItem> 
             <MenuItem.Header> 
              <TextBox Text="{Binding Menu.Business, UpdateSourceTrigger=PropertyChanged}" LostFocus="end_change_UI" /> 
             </MenuItem.Header> 
            </MenuItem> 
           </ContextMenu> 
          </Setter.Value> 
         </Setter> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </MenuItem.Style> 
    </MenuItem> 
</Menu> 
+0

Merci aussi simple que cela! Fonctionne parfaitement –