<Window x:Class="Commands.SimpleDocument" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="SimpleDocument" Height="300" Width="300"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="Auto"></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <Menu Grid.Row="0"> <MenuItem Header="File"> <MenuItem Command="New"></MenuItem> <MenuItem Command="Open"></MenuItem> <MenuItem Command="Save"></MenuItem> <MenuItem Command="SaveAs"></MenuItem> <Separator></Separator> <MenuItem Command="Close"></MenuItem> </MenuItem> </Menu> <ToolBarTray Grid.Row="1"> <ToolBar> <Button Command="New">New</Button> <Button Command="Open">Open</Button> <Button Command="Save">Save</Button> </ToolBar> <ToolBar> <Button Command="Cut">Cut</Button> <Button Command="Copy">Copy</Button> <Button Command="Paste">Paste</Button> </ToolBar> </ToolBarTray> <TextBox Name="txt" Margin="5" Grid.Row="2" TextWrapping="Wrap" AcceptsReturn="True" TextChanged="txt_TextChanged"></TextBox> </Grid> </Window> //File:Window.xaml.cs using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace Commands { public partial class SimpleDocument : System.Windows.Window { public SimpleDocument() { InitializeComponent(); CommandBinding binding; binding = new CommandBinding(ApplicationCommands.New); binding.Executed += NewCommand; this.CommandBindings.Add(binding); binding = new CommandBinding(ApplicationCommands.Open); binding.Executed += OpenCommand; this.CommandBindings.Add(binding); binding = new CommandBinding(ApplicationCommands.Save); binding.Executed += SaveCommand_Executed; binding.CanExecute += SaveCommand_CanExecute; this.CommandBindings.Add(binding); } private void NewCommand(object sender, ExecutedRoutedEventArgs e) { Console.WriteLine("New command triggered with " + e.Source.ToString()); isDirty = false; } private void OpenCommand(object sender, ExecutedRoutedEventArgs e) { isDirty = false; } private void SaveCommand_Executed(object sender, ExecutedRoutedEventArgs e) { Console.WriteLine("Save command triggered with " + e.Source.ToString()); isDirty = false; } private bool isDirty = false; private void txt_TextChanged(object sender, RoutedEventArgs e) { isDirty = true; } private void SaveCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e) { e.CanExecute = isDirty; } } }