Как передать данные из события дочерней формы в родительский элемент формы? - PullRequest
0 голосов
/ 24 января 2011

В настоящее время у меня есть основная форма, из которой я вызываю всплывающее окно, которое я создал в отдельном файле XAML для проверки орфографии.Это называется так:

SpellCheckerPopupControl popupControl = new SpellCheckerPopupControl();

popupControl.SpellChecklistBox.Items.Clear();

//some code to check the word and populate the child listbox with spelling suggestions

popupControl.SpellCheckerPopup.IsOpen = true;

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

XAML для SpellCheckerPopup - это просто <PopUp> с <ListBox> внутри.

Просто для целей тестирования я попытался просто взять вывод о том, что происходит, и вставить строку в главное текстовое поле следующим образом: MainPage.txtArticle.Text = s;, но, хотя бит MainPage доступен, ни один из его элементов неи поэтому я не могу манипулировать ими из дочернего события.

Ответы [ 3 ]

0 голосов
/ 24 января 2011

Вы также можете создать свойство в вашем файле Program.cs, которому вы могли бы передать значение.Тогда у вас будет доступ ко всему этому приложению.Просто используйте:

Program.SomeProperty
0 голосов
/ 25 января 2011

Использование переменных, объявленных где-то еще, является способом решения проблемы, поскольку ничто не гарантирует актуальность этих «внешних» данных.

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

0 голосов
/ 24 января 2011

Создайте свойство окна

var window = new popupControl.Open();

, а затем в window.cidden проверьте событие для Window.txtArticle .Text;

Это должно работать.Если нет, то свяжите их со свойствами в коде.

[update]

Пример:

var window = new MyTestChildWindow();
//This is just to show how to change properties in the testwindow.
window.SomeProperty = true;
window.Show();
window.Closed += (s, ea) =>
{
  if (window.DialogResult.ToBoolean())
  {
    // this is a property in the code behind.
    if (window.SelectedItem != null)
    {
      //Property = property on mainpage
      //window.SelectedItem = property in childwindow
      this.Property = window.SelectedItem;
    }
  }
};

этот код находится на главной странице.

надеюсь, это поможет.

...