Команды обеспечивают автоматическое отключение кнопок, использующих их, когда команда не может быть выполнена. Если вы создаете команду и добавляете обработчики для нее в свой UserControl, внешняя кнопка Add может использовать команду.
<local:TreeViewControl x:Name="Tree"/>
<Button Content="Add" Command="{x:Static local:TreeViewControl.AddCommand}" CommandTarget="{Binding ElementName=Tree}"/>
Создание команды и подключение:
public partial class TreeViewControl : UserControl
{
public static RoutedCommand AddCommand { get; private set; }
static TreeViewControl()
{
AddCommand = new RoutedCommand("AddCommand", typeof(TreeViewControl));
}
public TreeViewControl()
{
InitializeComponent();
CommandBindings.Add(new CommandBinding(AddCommand, AddExecuted, AddCanExecute));
}
public void AddExecuted(object sender, ExecutedRoutedEventArgs e)
{
}
public void AddCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = false; // your logic here
}
}
Если вы используете MVVM, вы можете использовать DelegateCommand или RelayCommand, чтобы делать похожие вещи из ViewModel.