RoutedCommand для нескольких окон
Просматривал результаты Google уже несколько часов, и все, что я нашел, это примеры того, как использовать RoutedCommand для перехвата MouseClicks и сочетаний клавиш для выполнения тех же действий.
Я читал некоторые источники о RoutedCommand, такие как MSDN и https://joshsmithonwpf.wordpress.com/2008/03/18/understanding-routed-commands/ и если я все еще правильно понимаю, он также должен иметь возможность делать то, что я необходимость:
- Нажмите кнопку в Window2
- Вызов метода в Window2
- Вызов метода в Window1
- Вызов метода в Window3 и т. Д.
Сценарий использования - это окно настроек, в котором содержатся настройки языка, и после нажатия кнопки "ОК" в настройках все активные окна должны изменить свои языковые строки. Я поднял метод, который перезагружает строки с идентификатором языка.
Поэтому в целом я хочу, чтобы ButtonClick в Window2 передавал команду для вызова метода "ChangeLanguage(lng)" всем активным окнам, будь то родительское MainWindow или другое ChildWindow, вообще не связанное с настройками. Классы Window имеют свои собственные функции ChangeLanguage() для изменения своих собственных строк.
Интересно, было бы лучше использовать пользовательский EventHandler в этом случае и каким-то образом сделать его глобальным, чтобы каждое активное окно прослушивало событие, которое запускается при изменении языка в окне настроек. Я нашел пример для глобального CommandHandler по другому вопросу здесь, но это не работает для события, я полагаю.
1 ответ
- Если ваши объекты просмотра вложены в корневой элемент управления и вы нажимаете кнопку, расположенную в корневом элементе управления, вы можете создать TunnelingRoutedEvent, который будет спускаться по визуальному дереву. В Window1, Window2 и т. Д. Вы обрабатываете это событие.
- Вы можете создать статический делегат, к которому будут присоединяться методы из Window1, Window2 и т. Д., И после вызова делегата также будут вызываться все связанные методы.
- Если вы используете PRISM,CompositeCommand- это то, что вы ищете.