В чем преимущество использования RoutedCommands в WPF
Я пытаюсь понять, какие преимущества дает использование пользовательских команд RoutedCommands в WPF по сравнению со стандартным событием.
Предположим, у меня есть пользовательский RoutedCommand, объявленный в статическом классе:
public static readonly RoutedCommand Foo = new RoutedCommand();
И чтобы подключить его к UIElement, я бы сделал это:
CommandBindings.Add(new CommandBinding(Commands.Foo, new ExecutedRoutedEventHandler((x, y) => {
MessageBox.Show("Something Happend");
})));
Хорошо, обычно более понятным способом, но мой первый вопрос - как маршрутизируемая команда отслеживает, что этот конкретный элемент пользовательского интерфейса имеет CommandBinding против него? Отслеживает ли маршрутизируемая команда все дерево приложений для привязок команд, пока не найдет UIElement с правильной маршрутизируемой командой в своем списке командных привязок?
Я заметил, что что-то еще должно запускать эту команду, как кнопка
btn.Command = Commands.Foo;
Мой следующий вопрос, какой смысл создавать эти перенаправленные команды только для стандартного события?
1 ответ
Основное преимущество заключается в том, что при использовании MVVM он разделяет различные уровни вашего приложения. Он помещает код в ViewModel и не загрязняет ваш вид. Это также позволяет командам Bubble
вверх визуальное дерево, чтобы элементы управления контейнером могли обрабатывать команды своих дочерних элементов.
Из вашего примера кода мне кажется, что вы на самом деле не используете MVVM, поэтому, если вам не нужны функции пузыривания (или туннелирования), вы можете не получить никакой выгоды от использования команд.