2017-03-16 1 views
0

Ich muss ein Kontextmenü für einen Menüeintrag erstellen. Die Sichtbarkeit des Kontextmenüs ist an das ViewModel gebunden.ContextMenu der MenuItem Sichtbarkeitsbindung

Wenn sich die Eigenschaft mit MVVM Light auf true ändert, wird das Kontextmenü in der Benutzeroberfläche angezeigt, auch wenn kein Rechtsklick auf den Menüeintrag erfolgt. Was kann ich tun, um das Kontextmenü auszublenden, wenn der Wert false ist, und alles nur für den Rechtsklick sichtbar zu machen?

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> 

Antwort

0

Sie könnten ein Style zum MenuItem gelten, die nur die ContextMenu Eigenschaft setzt, wenn die IsEditable Quelleigenschaft auf true gesetzt:

<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

Dank so einfach ist das! Funktioniert perfekt –