#344 – The CommandBinding CanExecute Event Determines Whether a Button is Enabled
July 18, 2011 1 Comment
When you associate a button’s Command property with a CommandBinding object,and bind the CommandBinding object to both Executed and CanExecute handlers, the Button control will automatically toggle between enabled/disabled, depending on the code in the CanExecute method.
Suppose we create two buttons, binding them to open/close commands.
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> <Button Content="Open" Command="ApplicationCommands.Open" VerticalAlignment="Center" Padding="10,5" Margin="5"/> <Button Content="Close" Command="ApplicationCommands.Close" VerticalAlignment="Center" Padding="10,5" Margin="5"/> </StackPanel>
Then we create a CommandBinding and associated handlers.
public MainWindow() { this.InitializeComponent(); CommandBindings.Add(new CommandBinding(ApplicationCommands.Open, Open_Executed, Open_CanExecute)); CommandBindings.Add(new CommandBinding(ApplicationCommands.Close, Close_Executed, Close_CanExecute)); } private bool isOpen = false; public void Open_Executed(object sender, ExecutedRoutedEventArgs e) { MessageBox.Show("Open"); isOpen = true; } public void Open_CanExecute(object sender, CanExecuteRoutedEventArgs e) { e.CanExecute = !isOpen; } public void Close_Executed(object sender, ExecutedRoutedEventArgs e) { MessageBox.Show("Close"); isOpen = false; } public void Close_CanExecute(object sender, CanExecuteRoutedEventArgs e) { e.CanExecute = isOpen; }
The buttons will now automatically be enabled/disabled, depending on the value of isOpen.
Found best multi event command binder in codeplex
Multi Event Command
Benefits:
1:Ability to bind multiple event to multiple commands.
2:In CommandArgs in command handler you can even get original event args this was not possible with existing command binders.
3:In CommandArgs in command handler you can even get original source of the event this was not possible with existing command binders.
4:In this you can control individual CanExecute methods.
Blogs
Multi Event Command BlogSpot
Multi Event Command WordPress