Основное неудобство интерфейса ICommand
заключается в том, что команда «похоронена» в другом экземпляре класса.Обычно вы хотите, чтобы команда работала с классом, предоставляющим свойство ICommand
.
Классический RelayCommand
, популяризированный Джошем Смитом, создается путем предоставления лямбда-выражений для Execute
и * 1007.* method.
Используя лямбда-выражения для ваших ICommand
методов, вы можете «поднять» команду обратно в класс, с которым вы работаете.Альтернативой является либо тесная связь между классом команд и управляемым классом, либо переадресация методов, которые отправляют операции обратно в командующий класс.
Лямбда-выражение имеет разрешение на доступ к закрытым членам, которые находятся в области действия в то времякоманда построена.Это значительно уменьшает неудобство, связанное с тем, что свойство ICommand
должно быть отдельным экземпляром класса.
Тем не менее, достаточно общий ICommand
, использующий открытый API класса для выполнения своего действия, также может быть полезными повторно используемый шаблон реализации.