property - wpf set binding
Comandos estándar de WPF-¿Dónde está la salida? (5)
AFAIK no hay ApplicationCommands.Quit o ApplicationCommands.Exit, así que supongo que tendrás que crearlo tú mismo ...
De todos modos, si estás usando el patrón MVVM , los comandos de enrutamiento no son exactamente útiles, por lo que es mejor usar una alternativa ligera como RelayCommand o DelegateCommand .
Estoy creando un menú estándar en mi aplicación WPF.
Sé que puedo crear comandos personalizados, pero también hay un montón de comandos estándar para enlazar.
Por ejemplo, para abrir un archivo debo enlazar con ApplicationCommands.Open , para cerrar un archivo debo enlazar con ApplicationCommands.Close . También hay una gran cantidad de EditCommands , ComponentCommands o NavigationCommands .
No parece haber un comando "Salir". Hubiera esperado que fuera ApplicationCommands.Exit .
¿Qué debo enlazar al elemento de menú "Salir"? Para crear un comando personalizado para algo, este genérico simplemente parece incorrecto.
Desafortunadamente, no hay un ApplicationCommands.Exit predefinido. Se sugirió agregar uno a WPF en Microsoft Connect en 2008: http://connect.microsoft.com/VisualStudio/feedback/details/354300/add-predefined-wpf-command-applicationcommands-exit . Sin embargo, el artículo ha sido marcado como cerrado / pospuesto.
Mike Taulty habló sobre cómo crear su propio comando Exit en un artículo en su blog.
No es tan complejo en realidad (pero aún así, M $ apesta por no proporcionarlo). Aqui tienes:
public static class MyCommands
{
private static readonly ICommand appCloseCmd = new ApplicationCloseCommand();
public static ICommand ApplicationCloseCommand
{
get { return appCloseCmd; }
}
}
//===================================================================================================
public class ApplicationCloseCommand : ICommand
{
public event EventHandler CanExecuteChanged
{
// You may not need a body here at all...
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public bool CanExecute(object parameter)
{
return Application.Current != null && Application.Current.MainWindow != null;
}
public void Execute(object parameter)
{
Application.Current.MainWindow.Close();
}
}
Y el cuerpo del controlador de eventos AplicationCloseCommand.CanExecuteChanged
puede que ni siquiera sea necesario.
Lo usas así:
<MenuItem Header="{DynamicResource MenuFileExit}" Command="MyNamespace:MyCommands.ApplicationCloseCommand"/>
¡Aclamaciones!
(No puedes imaginarte cuánto tiempo me tomó descubrir estas cosas del Comando ...)
Puede modificar la propiedad de texto de un comando antes de enlazarlo en una ventana. Esto cambiará el texto del comando en cualquier lugar que aparezca en su interfaz de usuario.
EDITAR: haga esto para cerrar en la ventana o el ctor de aplicación
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
Application.Current.Shutdown();
}