Передача данных между формами WPF

form1 имеет button btnInvoke которая вызывает form2 . form2 содержит textbox и button btn2 .

Пользователь должен ввести данные в textbox и нажать btn2 .

Когда btn2 form2 должен отправить textbox data btn2 .

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

Что мне делать?

Существует два метода, которые вы можете использовать. Первым из них будет использование ShowDialog и общедоступного метода, а затем проверка того, что DialogResult является истинным, а затем считывает значение из метода.

т.е.

 if (newWindow.ShowDialog() == true) this.Title = newWindow.myText(); 

Второй способ – создать CustomEvent и подписаться на него в окне создания, как это.

MainWindow.xaml.cs

 public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { Window1 newWindow = new Window1(); newWindow.RaiseCustomEvent += new EventHandler(newWindow_RaiseCustomEvent); newWindow.Show(); } void newWindow_RaiseCustomEvent(object sender, CustomEventArgs e) { this.Title = e.Message; } } 

Window1.xaml.cs

 public partial class Window1 : Window { public event EventHandler RaiseCustomEvent; public Window1() { InitializeComponent(); } public string myText() { return textBox1.Text; } private void button1_Click(object sender, RoutedEventArgs e) { RaiseCustomEvent(this, new CustomEventArgs(textBox1.Text)); } } public class CustomEventArgs : EventArgs { public CustomEventArgs(string s) { msg = s; } private string msg; public string Message { get { return msg; } } } 

В вашей form1 укажите публичное свойство.

 public string MyTextData { get; set; } 

В вашей form2 нажмите кнопку мыши, введите экземпляр form1 и установите его значение в значение TextBox.

 var frm1 = Application.Current.Windows["form1"] as Form1; if(frm1 ! = null) frm1.MyTextData = yourTextBox.Text; 

В вашей Form1 вы получите текст в своей собственности MyTextData

Это лучше, если вы следуете конвенции для обозначения окон. Используйте Window вместо Form для обозначения ваших окон в WPF. Форма обычно используется с приложениями WinForm.

Это может быть излишним, но EventAggregator может быть хорошим решением здесь. Это позволит вам поднять событие в form1 которое затем может быть подписано на form2 .

Существуют некоторые подробности и примеры реализации EventAggregator в https://stackoverflow.com/questions/2343980/event-aggregator-implementation-sample-best-practices .

Поскольку вы работаете с WPF, используйте CommandBindings и Messaging . Я также рекомендую вам, чтобы вы взглянули на конструкцию MVVM, я преподает инструмент MVVM Light Toolkit . Существует много HowTos для фреймворка, просто спросите Google.

  • Изображение в WPF-кнопке не отображается в режиме Runtime
  • Как изменить цвет фона кнопки WinAPI C ++
  • Невозможно добавить текст в виде кнопки в андроид-студии
  • Android setOnClickListener - Как это работает?
  • Как работает свойство WPF Button.IsCancel?
  • Вызов кнопки Capture на Android
  • Кнопка переключения текста в jquery
  • Кнопка изображения андроида
  • ToggleButton в C # WinForms
  • Как добавить динамический переключатель в соответствии с заданным количеством отсчетов?
  • Как использовать jQuery для отображения / скрытия divs на основе выбора переключателя?
  • Давайте будем гением компьютера.