que internet definicion comandos comando wpf command contextmenu menuitem

wpf - definicion - comandos de internet



WPF: ¿cómo ocultar el elemento de menú si CanExecute del comando es falso? (5)

Gracias por la solución. Para aquellos que quieran XAML explícito esto podría ayudar:

<Window.Resources> <BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" /> </Window.Resources> <ContextMenu x:Key="innerResultsContextMenu"> <MenuItem Header="Open" Command="{x:Static local:Commands.AccountOpened}" CommandParameter="{Binding Path=PlacementTarget.DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}" CommandTarget="{Binding Path=PlacementTarget, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}" Visibility="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}, Mode=OneWay, Converter={StaticResource booleanToVisibilityConverter}}" /> </ContextMenu>

En mi caso, el menú contextual es un recurso, por lo que el enlace para la visibilidad debe usar la configuración de vinculación propia de RelativeSource.

Como un lado, para CommandParameter, también puede pasar el DataContext del elemento al que se hizo clic para abrir el menú contextual. Y para enrutar los enlaces de comando a la ventana principal, deberá configurar CommandTarget en consecuencia también.

Por defecto, los elementos del menú se desactivan cuando su comando no se puede ejecutar (CanExecute = false). ¿Cuál es la forma más fácil de hacer que el elemento del menú sea visible / contraído en función del método CanExecute?

Gracias

Para su comodidad, aquí está la solución: vincule la propiedad de visibilidad a la propiedad IsEnabled utilizando el convertidor "Booleano a Visibilidad".



No sé si esta es la manera más fácil, pero siempre puede crear una propiedad que devuelva CanExecute() y luego vincular la Visibilidad de su elemento a esta propiedad, utilizando un IValueConverter para convertir el booleano en Visibilidad.


Simplemente puede vincular Visibility a IsEnabled (establecer en false en CanExecute == false). Aún necesitaría un IValueConverter para convertir el bool en visible / colapsada.

public class BooleanToCollapsedVisibilityConverter : IValueConverter { #region IValueConverter Members public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { //reverse conversion (false=>Visible, true=>collapsed) on any given parameter bool input = (null == parameter) ? (bool)value : !((bool)value); return (input) ? Visibility.Visible : Visibility.Collapsed; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } #endregion }


<Style.Triggers> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Visibility" Value="Collapsed"/> </Trigger> </Style.Triggers>

CanExecute alterna la propiedad IsEnabled , así que simplemente mira esto y guarda todo en la interfaz de usuario. Crea un estilo separado si quieres reutilizar esto.