2016-01-25 4 views
2

У меня есть выбор из TextBoxes, который пользователь заполняет, когда хочет отметить, что у них был контакт с другим человеком. Большинство из TextBoxes подразумевают заполнение, введя их. Однако для одного из них я хотел бы, чтобы пользователь мог выбрать из списка People, который появляется, когда они нажимают на кнопку.Передача данных из одного окна в другое окно

Здесь я испытываю проблемы. До сих пор я только что создал DataGrid и обработал его SelectionChanged метод для заполнения текстового объекта TextBoxes. Это отлично работает, однако сейчас на текущей странице недостаточно места для показа всего DataGrid со всеми людьми, которых они могут выбрать.

Я решил показать People в отдельном, меньшем Window, который появляется, когда пользователь нажимает Button. Проблема заключается в том, что, когда пользователь выбирает Person, они хотят отметить контакт в новом Window, я понятия не имею, как я могу уведомить оригинал Window о том, что выбрано Person, закройте новые Window и заполните соответствующий TextBox на оригинале Window.

Что было бы самым интуитивно понятным способом заполнить TextBox на оригинале Window, основанный на выборе на Window, который открывается?

ответ

0

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

Ссылка: https://msdn.microsoft.com/en-us/library/ms173171.aspx

0

При использовании такой структуры, как Galasoft в MVVM Light (http://www.galasoft.ch/), они имеют систему мессенджера только для этой цели. Это позволяет вам «транслировать» сообщения, которые могут быть «получены» любой другой частью приложения.

0

Это приложение, использующее Domain, Model, Presentation (Winforms/WPF версия MVC-форматирования) для вашего приложения.

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

Теперь, если я помню (делал больше MVC и не Winforms в последнее время), я считаю, что если вы используете метод ShowDialog(), он заморозит основной поток, поэтому, когда вы закрываете основную форму, вы можете продолжить и прочитать которые вы открыли в своем классе форм. Синхронный Я считаю, что он работает как. Если вы используете только Show(), поток будет продолжать работать на грузовиках, асинхронно. При асинхронном использовании вам может понадобиться использовать основную форму в вашем стартовом коде, поэтому всегда есть окно, но подписаться на событие закрытия ваших форм и иметь метод, который может вывести этих публичных членов. Обязательно создайте дополнительные формы в корне основного класса, чтобы он не выпал из области действия, когда существует метод, который его вызывает. Возможно, вы даже сможете сделать метод, который вызывает асинхронный вызов, и ждать перед командой, которая запускает метод Show в форме.

Резюме. Рассматривайте каждую форму как свой собственный класс, но добавляйте публичные элементы, которые могут считывать значения из элементов управления и/или переменных, которые вы хотите.Прочитайте эти данные из класса, когда он закрывается через событие или синхронно, когда поток закрывается из закрытия формы. Закрытие формы не отбрасывает объект, а просто визуализирует форму.

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

Помните, что все это класс, как только вы смотрите на него как таковое и относитесь к нему как таковому, ответ придет. :-)

Я должен предупредить, я долгое объяснение.

При работе, помещающем все это в память, возможны некоторые ошибки. Дайте мне знать, если есть.

0

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

((MainWindow)Application.Current.MainWindow).MyTextBox 
Смежные вопросы