Вы создаете привязку команд так же, как и любую другую привязку в коде.
Например,
Binding b = new Binding();
b.Source = myViewModel;
b.Path = new PropertyPath("ExitCommand");
MyButton.SetBinding(Button.CommandProperty, b);
Привязки команд ожидают привязки к объекту типа ICommand
. Когда они выполняются, например, при нажатии кнопки, они сначала вызывают ICommand.CanExecute()
, а если это правда, то они вызывают ICommand.Execute()
. Если установлено свойство CommandParameter
, то оно используется при оценке CanExecute
и Execute
В случае кнопок WPF с привязкой команд свойство IsEnabled
автоматически связывается с результатом ICommand.CanExecute
. Метод CanExecute
запускается один раз при первой загрузке кнопки и запускается снова каждый раз, когда изменяется привязка команды.
Если вы хотите, чтобы он обновлялся чаще, например, когда меняется CommandParameter
, вам нужно подключить что-то дополнительное, чтобы обновить привязку при изменении CommandParameter
. Большинство RelayCommands
, как я вижу, имеют эту встроенную функцию, например MVVM Light RelayCommand
, хотя другие команды, такие как Microsoft PRISM DelegateCommand
, по умолчанию не имеют такого поведения.