контекстно-зависимый RoutedUICommand.CanExecute, Execute - PullRequest
0 голосов
/ 11 февраля 2009

У меня есть одна команда RoutedUIC, к которой можно получить доступ через различные места в пользовательском интерфейсе. Такие, как глобальные сочетания клавиш, меню, ContextMenu или кнопки. Код, который должен быть выполнен в методах RoutedUICommand.CanExecute и RoutedUICommand.Execute, зависит от того, какой элемент пользовательского интерфейса был использован. Как я могу добиться этой дифференциации. Я думал, что я мог бы использовать (Can) ExecutedRoutedEventArgs.Source или OrigianlSource, но источник всегда один и тот же. Это главное окно Root. Как это обычно достигается? Что я мог делать не так?

Ответы [ 2 ]

1 голос
/ 11 февраля 2009

Если вам нужен другой код для запуска в зависимости от интерфейса, который вызвал команду, вы, вероятно, делаете что-то не так.

Если у вас есть что-то вроде простого нажатия клавиши или открытия диалогового окна с запросом дополнительной информации из меню, вы должны разбить это на две команды (например, команды MS Office «Печать» и «Быстрая печать»).

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

И если вы решите игнорировать мой совет выше, взгляните на свойство CommandParameter, вы можете установить другое значение для параметра для каждого элемента пользовательского интерфейса, по крайней мере с его помощью вы можете сохранить иллюзию разделения пользовательского интерфейса / логики. Команды предназначены для обеспечения.

0 голосов
/ 11 февраля 2009

Обычно у вас могут быть разные реализации CommandBinding для разных «целей» - разное поведение для каждого «источника» необычно.

Не могли бы вы привести пример того, что вы пытаетесь сделать?

...