2016-08-09 3 views
0

Когда элемент имеет свойство Command, связанное с ICommand, вы можете ожидать, что его включенное состояние будет полагаться на ICommand.CanExecute. То, что я хотел бы сделать, это сделать интерфейс, наследующий от ICommand, который предоставляет «MayExecute», чтобы сделать то же самое для контроля видимости. Есть ли чистый способ сделать это без эффективной перекомпиляции .NET?Можно ли расширить поведение ICommand WPF для элементов управления?

ответ

1

Я бы посмотрел на это с прикрепленным имуществом. Я думаю, что это выполнимо (и довольно круто тоже).

Вложенное свойство будет иметь возможность проверить, соответствует ли значение Command целевому управлению IVanishingCommand или тому, что вы его называете. Если это так, он подписывается на MayExecuteChanged и соответственно переопределяет видимость элемента управления.

Этот метод снова вызывается, когда Command получает новое значение (и обязательно отмените подписку на старое событие Command).

Используйте отражение, чтобы получить свойство зависимостей управления Command; Button и MenuItem, например, не наследуют Command от любого общего базового класса.

Возможно, вы тоже сможете сделать это с помощью триггера в стиле, но в скором времени это станет ужасным, чтобы сделать это во всех этих разных стилях.