Не так уж сложно на самом деле (но все равно M $ отстой, если не предоставил его). Вот, пожалуйста:
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();
}
}
И тело обработчика событий AplicationCloseCommand.CanExecuteChanged
может даже не понадобиться.
Вы используете это так:
<MenuItem Header="{DynamicResource MenuFileExit}" Command="MyNamespace:MyCommands.ApplicationCloseCommand"/>
Ура!
(Вы не можете себе представить, сколько времени я потратил на то, чтобы открыть этот командный материал сам ...)