WPF / SL - Извлечь из производной ICommand или делегировать в Execute / CanExecute - PullRequest
1 голос
/ 10 ноября 2011

Кажется, что большинство сред MVVM используют производную ICommand, где они просто предоставляют делегаты для методов Execute / CanExecute в представлении, вместо получения нового класса и переопределения методов Execute / CanExecute.

лучший дизайн?Передача делегатов метода или получение при предоставлении Execute / CanExecute для ICommand?

Кажется, получение получит больше возможности повторного использования команды в других представлениях и может быть чище?Но для небольших операций Execute / CanExecute накладные расходы на создание нового производного класса слишком велики, и лучше просто передать delgates методам в представлении?

Спасибо за понимание передовых методов.

1 Ответ

2 голосов
/ 10 ноября 2011

Основное неудобство интерфейса ICommand заключается в том, что команда «похоронена» в другом экземпляре класса.Обычно вы хотите, чтобы команда работала с классом, предоставляющим свойство ICommand.

Классический RelayCommand, популяризированный Джошем Смитом, создается путем предоставления лямбда-выражений для Execute и * 1007.* method.

Используя лямбда-выражения для ваших ICommand методов, вы можете «поднять» команду обратно в класс, с которым вы работаете.Альтернативой является либо тесная связь между классом команд и управляемым классом, либо переадресация методов, которые отправляют операции обратно в командующий класс.

Лямбда-выражение имеет разрешение на доступ к закрытым членам, которые находятся в области действия в то времякоманда построена.Это значительно уменьшает неудобство, связанное с тем, что свойство ICommand должно быть отдельным экземпляром класса.

Тем не менее, достаточно общий ICommand, использующий открытый API класса для выполнения своего действия, также может быть полезными повторно используемый шаблон реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...