/ / ContextMenu wiązania widoczności MenuItem - c #, wpf, mvvm-light

ContextMenu powiązania widoczności MenuItem - c #, wpf, mvvm-light

Muszę utworzyć menu kontekstowe dla elementu menu. Widoczność menu kontekstowego jest powiązana z ViewModel.

Gdy właściwość zmieni się na true, za pomocą MVVMJasne, menu kontekstowe pojawia się w interfejsie użytkownika, nawet jeśli element menu nie jest kliknięty prawym przyciskiem myszy. Co mogę zrobić, aby ukryć menu kontekstowe, gdy wartość jest fałszywa, i pozwolić, aby była widoczna tylko po kliknięciu prawym przyciskiem myszy?

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>

Odpowiedzi:

0 dla odpowiedzi № 1

Możesz zastosować a Style do MenuItem który tylko ustawia ContextMenu właściwość, gdy IsEditable Właściwość source jest ustawiona na 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>