Wpf как передать данные из одного окна в другое
Перейти к содержимому

Wpf как передать данные из одного окна в другое

  • автор:

Wpf как передать данные из одного окна в другое

Рассмотрим, как мы можем взаимодействовать с несколькими окнами в WPF. Для этого создадим новый проект. По умолчанию он уже содержит одно главное окно MainWindow. Теперь добавим еще одно окно. Для этого в окне добавления нового элемента нам надо выбрать тип «Window (WPF)»:

Добавление окна в WPF

Назовем его TaskWindow .

Теперь определим на главном окне MainWindow кнопку для открытия нового окна:

Обработчик нажатия кнопки Button_Click будет выглядеть так:

private void Button_Click(object sender, RoutedEventArgs e)

Для открытия нового окна создаем его объект и затем вызываем метод Show() .

Взаимодействие между окнами в WPF

При нажатии на кнопку открывается окно TaskWindow.

Используя ссылку на окно, мы можем взаимодействовать с ним, например, передавать ему данные из главной формы или вызывать его методы. Например, изменим код C# класса TaskWindow:

using System.Windows; namespace WindowApp < public partial class TaskWindow : Window < public string ViewModel < get; set; >public TaskWindow() < InitializeComponent(); >public void ShowViewModel() < MessageBox.Show(ViewModel); >> >

Здесь добавлено свойство ViewModel и метод, который отображает его содержимое. Теперь изменим обработчик Button_Click в главном окне MainWindow:

private void Button_Click(object sender, RoutedEventArgs e)

Здесь у окна TaskWindow устанавливается свойство ViewModel и вызывается его метод.

Важно отметить, что после открытия эти окна существуют независимо друг от друга. Мы можем закрыть главное окно MainWindow, и второе окно TaskWindow все равно продолжит свою работу. Однако мы можем задать и другое поведение.

У всех окон есть свойство Owner , которое указывает на главное окно, владеющее текущим окном. Так, изменим обработчик Button_Click в главном окне:

private void Button_Click(object sender, RoutedEventArgs e) < TaskWindow taskWindow = new TaskWindow(); //Теперь MainWindow главное окно для taskWindow taskWindow.Owner = this; taskWindow.Show(); >

Теперь текущий объект MainWindow является владельцем taskWindow. Если, к примеру, мы закроем MainWindow, то закроется и TaskWindow.

Кроме того, мы можем обращаться из TaskWindow к своему владельцу:

public partial class TaskWindow : Window < public void ChageOwnerBackground() < this.Owner.Background = new SolidColorBrush(Colors.Red); >// остальной код >

С другой стороны все зависимые окна доступны в главном окне-владельце через свойство OwnedWindows :

private void Button_Click(object sender, RoutedEventArgs e) < TaskWindow taskWindow = new TaskWindow(); taskWindow.Owner = this; taskWindow.Show(); foreach(Window window in this.OwnedWindows) < window.Background = new SolidColorBrush(Colors.Red); if (window is TaskWindow) window.Title = "Новый заголовок!"; >>

Класс App и свойство Windows

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

foreach(Window window in App.Current.Windows) < window.Background = new SolidColorBrush(Colors.Red); // если окно - объект TaskWindow if (window is TaskWindow) window.Title = "Новый заголовок!"; >

Передача данных из одного окна в другое

Author24 — интернет-сервис помощи студентам

Доброго времени суток. Только начинаю программировать в WPF. При написании приложения возник вопрос: как передать значение переменной из одного окна в другое(конкретно-в главное окно MainWindow)? Например, в окне Window1 имеется TextBox с именем «text_», свойство Text которого нужно передать в главное, и отобразить этот Text в Label, находящегося на главном окне. Как это сделать?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Передача значения из одного окна в другое
Здравтсвуйте! В окне браузера открыта страница. При клике на ссылку вызвали новое окно.

Передача параметров из одного окна в другое
Здравствуйте. В программе есть два окна: одно — основное окно программы, другое — окно с.

Передача сообщения из одного окна в другое
привет, совсем новичок в винапи, такая задача появилась: есть одно окно с двумя EDIT полями, в.

Передача текста из одного окна в другое
Добрый вечер! Как к примеру из lineEdit передать текст в другое окно и отобразить в label? .

53 / 53 / 18
Регистрация: 26.07.2012
Сообщений: 188

В MainWindow объявить конструктор с параметром и передавать текст, который нужно отобразить.

1 2 3 4
public MainWindow(String text) { _myLable.Cotent = text; }

код в окне Window1

mainWindow = new MainMainWindow(text_.Text); mainWindow.Show();

Альтернативный подход — объявить в MainWindow свойство

1 2 3 4 5
public String LabelText {get; set;} public MainWindow() { _myLable.Cotent = LabelText; }

код в окне Window1

1 2 3
mainWindow = new MainMainWindow(); mainWindow.LabelText = text_.Text; mainWindow.Show();

Как получить значение из одного окна в другом?

Есть 2 окна: FirstWindow и SecondWindow
Окно SecondWindow вызывается из FirstWindow по клику на MenuItem. Так же в FirstWindow есть TextBlock значение которого должно быть доступно из SecondWindow после его открытия. Надеюсь понятно описал.

Как это можно сделать?

  • Вопрос задан более трёх лет назад
  • 97 просмотров

Комментировать
Решения вопроса 2

yarosroman

Роман @yarosroman Куратор тега C#
C# the best

Самое простое, в SecondWindow передать ссылку на textblock в конструктор sw и сохранить ее в приватном поле

Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать

firedragon

Владимир Коротенко @firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.

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

Как передать два значения из одного окна в другое?

Author24 — интернет-сервис помощи студентам

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

P.S. пытался с помощью массива, но когда на выходе проверял переменные, почему то они всегда были равны нулю.
Окно с которого переношу Window1

shina =1 MainWindow mainWindow = new MainWindow(shina); //получается только с одной переменной

Окно на которое переношу MainWindow

1 2 3 4
public MainWindow(double shina) : this() { nrandom = shina; }

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как передать текст с одного диалогового окна в другое
Создал 2 диалога с помощью CreateDialog. Разместил в них органы для текста.(IDC_TEXT,IDC_TEXT2). Не.

Передать сообщение из одного окна в другое
У кого есть мысли по этому поводу?

Передать переменную из одного окна в другое
Здравствуйте! В первом окне, есть метка, для неё я задал переменную i = 999; А во втором окне, есть.

Передать данные из одного окна в другое
Добрый Вечер Не получается передать данные из окна Form2 в окно Form1 в Form2 я получаю id и.

Эксперт .NET

15470 / 10714 / 2788
Регистрация: 21.04.2018
Сообщений: 31,545
Записей в блоге: 2

ЦитатаСообщение от woodmac Посмотреть сообщение

Окно на которое переношу MainWindow

1 2 3 4 5
public MainWindow(double shinaб string title) : this() { nrandom = shina; Title = title; }

ЦитатаСообщение от woodmac Посмотреть сообщение

Окно с которого переношу Window1

MainWindow mainWindow = new MainWindow(1, "первый");

Регистрация: 08.10.2021
Сообщений: 23

Извините, но можете показать что я не так делаю.

1 2 3 4 5
public MainWindow(double shina double xmark1) : this() { // ^ здесь пишет ошибка синтаксиса }
1 2 3
double random; double xmark1; MainWindow mainWindow = new MainWindow(random , xmark1);

Эксперт .NET

15470 / 10714 / 2788
Регистрация: 21.04.2018
Сообщений: 31,545
Записей в блоге: 2

ЦитатаСообщение от woodmac Посмотреть сообщение

здесь пишет ошибка синтаксиса

Вы совсем Шарп не знаете?
Я писал здесь, в редакторе сообщений, и случайно пропустил запятую между параметрами конструктора.

Добавлено через 2 минуты
Вернее не пропустил, а не в в той раскладке клавишу нажал.
Посмотрите — после первого параметра русская «б» — это запятая в английской раскладке.

Регистрация: 08.10.2021
Сообщений: 23
Да, я только начал изучать, спасибо за помощь

Эксперт .NET

15470 / 10714 / 2788
Регистрация: 21.04.2018
Сообщений: 31,545
Записей в блоге: 2

ЦитатаСообщение от woodmac Посмотреть сообщение

Да, я только начал изучать, спасибо за помощь

Ой и трудно вам будет.
У WPF довольно высокий порог вхождения.
Осваивать одновременно ООП, Шарп и WPF — будет крайне трудно.
А у вас похоже ещё и преподавательский состав не шибко.
В Решении с правильной архитектурой задачи «передать из View в другой View» даже возникать не должно.
Вас вместо того, что учить какая должна быть правильная архитектура, и как её правильно реализовывать учат искать кривые костыли для груды других кривых костылей.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Передать нажатие клавиши из одного окна в другое
Приветствую. Пишу здесь, так как отчаялся и на решение данного вопроса самостоятельно ушло 4 часа.

передать значение из одного поля диалогового окна в другое поле
Извините, поиском не могу найти ответ на простейший вопрос. Как считать или вывести данные.

Передать значения из одного события в другое
Здравствуйте. Есть два события БаттонКлик 1 и БаттонКлик 2. В первом вычисляем формулу (для.

Передача значения из одного окна в другое
Здравтсвуйте! В окне браузера открыта страница. При клике на ссылку вызвали новое окно.

Передача значения с одного окна в другое
Доброго времени суток. Делаю игру по типу монополии, и возник вопрос над которым уже сижу пару.

Передача значения из одного окна в другое для дальнейшего использования
Ребята, всем привет! Работаю сейчас над проектом, который требует регистрации по ключу (до ввода.

Как передать массив из одного в другое
Есть два массива e1 и e2. Соответственно значение и время. Они вычисляются после нажатия кнопки1.

Или воспользуйтесь поиском по форуму:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *