WPF и события из динамически создаваемых элементов управления - PullRequest
0 голосов
/ 28 апреля 2010

Мне нужна помощь для реализации общего поведения в некоторых элементах управления.

В моем приложении WPF у меня есть основная форма, которая содержит панель и кнопку:

Хорошо

При нажатии кнопки будет запущен метод Save. Метод Save считывает некоторые данные из формы и сохраняет данные в базе данных.

Панель заполняется динамически созданными элементами управления (такими как текстовое поле, выпадающие списки и т. Д.). Основная форма создает экземпляр класса MainViewModel. Этот класс MainViewModel создает экземпляр класса с именем UIFactory. Таким образом, у нас есть 3 уровня здесь.

В классе UIFactory создаются элементы управления. Панель из главной формы отправляется в качестве параметра методу в классе MainModelView, который называется GenerateUI. Этот метод GenerateUI в классе MainViewModel вызывает метод GenerateControls для класса UIFactory, который принимает ту же панель в качестве параметра. Затем метод GenerateControls в классе UIFactory добавляет динамически созданные элементы управления на панель.

Чего я хочу добиться, так это чтобы каждый раз, когда пользователь нажимал клавишу ВВОД, когда он печатал в одном из этих динамически создаваемых элементов управления, например в текстовом поле, я хотел, чтобы это поведение было таким же, как при нажатии кнопки в моей основной форме. Но как мне это сделать? Я думал о реализации маршрутизируемых событий на моих элементах управления, но я не могу понять, как это сделать. Не могли бы вы посоветовать мне, как достичь моей цели?

С наилучшими пожеланиями,

1018 * OKB *

Ответы [ 2 ]

0 голосов
/ 07 мая 2010

Мне удалось создать работу, связанную с моей проблемой:

Я создал собственный пользовательский элемент управления (назовем его контейнером). Этот элемент управления размещен в моем приложении wpf с использованием WindowsFormsHost вместо панели. Затем я добавляю динамически созданный пользовательский элемент управления в свой новый пользовательский элемент управления (контейнер) и добавляю KeyEventHandler в событие KeyUp каждого дочернего элемента управления. Я создал собственное событие и обработчик событий в своем контейнере, который будет перехватывать все события KeyUp от дочерних элементов управления, проверять, e.KeyValue == 13 (ENTER), а затем вызывать мое пользовательское событие из контейнера, который будет обрабатываться в моем wpf форма. Ужасно, как ч * л, но это работает.

0 голосов
/ 28 апреля 2010

Может быть, прикрепленное событие Keyboard.KeyUp может вам помочь. Вы можете установить его на главной панели, которая содержит динамически созданные элементы управления, а затем выполнить операцию сохранения, если нажатой клавишей была клавиша ENTER.

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