Wpf как передать данные из одного окна в другое
Рассмотрим, как мы можем взаимодействовать с несколькими окнами в WPF. Для этого создадим новый проект. По умолчанию он уже содержит одно главное окно MainWindow. Теперь добавим еще одно окно. Для этого в окне добавления нового элемента нам надо выбрать тип «Window (WPF)»:
Назовем его TaskWindow .
Теперь определим на главном окне MainWindow кнопку для открытия нового окна:
Обработчик нажатия кнопки Button_Click будет выглядеть так:
private void Button_Click(object sender, RoutedEventArgs e)
Для открытия нового окна создаем его объект и затем вызываем метод Show() .
При нажатии на кнопку открывается окно 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 = "Новый заголовок!"; >
Передача данных из одного окна в другое
Доброго времени суток. Только начинаю программировать в 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 Куратор тега C#
C# the best
Самое простое, в SecondWindow передать ссылку на textblock в конструктор sw и сохранить ее в приватном поле
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Владимир Коротенко @firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Передавать можно через конструктор, через публичное поле, а можно создать дата объект стнглтон где будут хранится значения для всего приложения, в форме будет только обработчик ontextchanged который будет выставлять значение в этом объекте
Как передать два значения из одного окна в другое?
Подсмотрел на данном форуме конструкцию для переноса переменных из одного окна в другое.
Она простая и её удобно использовать, но я не смог с помощью неё перенести ДВЕ переменные.
Подскажите пожалуйста, как с помощью этой конструкции передать две переменные, или она не подходит и нужен другой способ?
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 и.
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);
15470 / 10714 / 2788
Регистрация: 21.04.2018
Сообщений: 31,545
Записей в блоге: 2
Сообщение от woodmac
здесь пишет ошибка синтаксиса
Вы совсем Шарп не знаете?
Я писал здесь, в редакторе сообщений, и случайно пропустил запятую между параметрами конструктора.
Добавлено через 2 минуты
Вернее не пропустил, а не в в той раскладке клавишу нажал.
Посмотрите — после первого параметра русская «б» — это запятая в английской раскладке.
Регистрация: 08.10.2021
Сообщений: 23
Да, я только начал изучать, спасибо за помощь
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.
Или воспользуйтесь поиском по форуму: