Если я связываю ICommand с элементом управления в WPF, он включается/отключается в зависимости от состояния команды CanExecute. Мне известно, что отключение выполнения нескольких команд может быть выполнено с использованием одного логического поля во всех реализациях CanExcecute ICommand, который я хочу "сгруппировать". У меня вопрос, должен ли я сделать это так или сделать это в XAML каким-то образом? Есть ли "стандартный" способ сделать это? Любой класс .NET для управления этим?
В .NET Framework такого класса нет, но вы можете посмотреть, как класс CompositeCommand реализован в Prism.
Из документов:
Он поддерживает список дочерних команд (экземпляры
DelegateCommand
). МетодExecute
классаCompositeCommand
просто вызывает методExecute
для каждой из дочерних команд по очереди. МетодCanExecute
аналогичным образом вызывает методCanExecute
каждой дочерней команды, но если ни одна из дочерних команд не может быть выполнена, методCanExecute
вернетfalse
. Другими словами, по умолчаниюCompositeCommand
может выполняться только тогда, когда могут быть выполнены все дочерние команды.
Вы связываете дочерние команды, используя метод RegisterCommand
класса CompositeCommand
:
public DelegateCommand UpdateCommand { get; private set; }
public ViewModel()
{
UpdateCommand = new DelegateCommand(Update);
ApplicationCommands.SaveCommand.RegisterCommand(UpdateCommand);
}
ICommand
настолько, насколько вам нужно. Например, вы можете автоматизировать отключение нескольких команд, получая ссылки на все из них и увеличивая значениеCanExecuteChanged
для каждой из них.