4 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 493
1

Как сделать так, когда я ввожу информацию в окне 2, то она появлялась в главном окне тобишь в окне 1?

22.03.2020, 15:07. Показов 1301. Ответов 13
Метки нет (Все метки)

В общем нужно создать просто приложение по типу инсталятора с кнопками далее или назад. И я ввожу информацию в textbox допустим и она появляется в главном окне, нажимаю далее ввожу информацию в окне 2 и она появляется в главном окне. Вот мой код, но пока не работает:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<Window x:Class="win.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:win"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <StackPanel>
            <Label Content="Ввести данные студента. Для этого нажмите Далее." FontSize="20"/>
            <Button Content="Далее" Height="50" Width="50" Click="Button_Click"/>
            <TextBlock x:Name="myTextBlock" Text="{Binding ElementName=myTextBox,Path=Text}" Height="30" />
        </StackPanel>
    </Grid>
</Window>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
 
namespace win
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Window1 window1 = new Window1();
            window1.Show();
        }
    }
}
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<Window x:Class="win.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:win"
        mc:Ignorable="d"
        Title="Window1" Height="450" Width="800">
    <Grid>
        <StackPanel>
            <Label Content="ФИО" FontSize="20"/>
            <TextBox x:Name="myTextBox" Height="30" />
        </StackPanel>
    </Grid>
</Window>
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2020, 15:07
Ответы с готовыми решениями:

Как сделать так, чтобы при нажатии кнопки на дочернем окне, в родительском окне открылась какая-нибудь страница ?
Как сделать так, чтобы при нажатии кнопки на дочернем окне, в родительском окне открылась...

Как отобразить информацию (введенную в форму), в новом окне и во всплывающем окне?
Подскажите пожалуйста, у меня есть форма в нее делаю запись, как сделать так, что бы после введения...

Сделать возможным создание вкладок в окне Проводника, как в окне Google Chrome
Всем здравствуйте, смотрел видео уроки в инете и наткнулся на данную плюшку. Очень удобное украшает...

Как по нажатию кнопки в открытом новом окне сделать рефреш в том окне откуда оно было открыто?
Открываю скриптом новое окно. Как по нажатию кнопки в открытом новом окне сделать рефреш в том...

13
Модератор
Эксперт .NET
12189 / 8718 / 2374
Регистрация: 21.04.2018
Сообщений: 26,069
Записей в блоге: 2
22.03.2020, 15:18 2
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Вот мой код, но пока не работает:
Надо передавать контекст данных.
Посмотрите простой пример Скрытие элемента другой формы, которая уже открыта
0
4 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 493
22.03.2020, 16:08  [ТС] 3
Элд Хасп, Там где ViewModel это какое конкретное окно и куда это писать надо? В Главное окно или в окно 1??
0
Модератор
Эксперт .NET
12189 / 8718 / 2374
Регистрация: 21.04.2018
Сообщений: 26,069
Записей в блоге: 2
22.03.2020, 17:01 4
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Там где ViewModel это какое конкретное окно и куда это писать надо?
ViewModel устанавливается в контекст данных основного окна (первого).
XML
1
2
3
    <Window.DataContext>
        <local:ViewModel/>
    </Window.DataContext>
Во второе окно она передается из контекста в контекст при его создании
XML
22
23
24
25
26
27
28
29
30
31
32
33
    <x:Code>
        <![CDATA[
        private void window_Loaded(object sender, RoutedEventArgs e)
        {
            new ChildWind()
            {
                DataContext = DataContext
            }
            .Show();
        }
        ]]>
    </x:Code>
0
4 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 493
22.03.2020, 17:29  [ТС] 5
Цитата Сообщение от Элд Хасп Посмотреть сообщение
<![CDATA[
private void window_Loaded(object sender, RoutedEventArgs e)
{
new ChildWind()
{
DataContext = DataContext
}
.Show();
}
]]>
А зачем это надо было комментировать?

Добавлено через 4 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
<![CDATA[
И что это такое CDATA?? Это чтобы за комментировать или что? Или чтобы код прописать?
0
Модератор
Эксперт .NET
12189 / 8718 / 2374
Регистрация: 21.04.2018
Сообщений: 26,069
Записей в блоге: 2
22.03.2020, 17:47 6
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
И что это такое CDATA??
Прочитайте за <x:Code>.
Можно задать в Code-Behind
C#
1
2
3
4
5
6
7
8
        private void window_Loaded(object sender, RoutedEventArgs e)
        {
            new ChildWind()
            {
                DataContext = DataContext
            }
            .Show();
        }
А можно в XAML как я.
Это одно и тоже.
0
4 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 493
22.03.2020, 17:54  [ТС] 7
Элд Хасп, И еще у вас там этот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// <summary>ViewModel - предназначена для передачи в Контекст Данных окна</summary>
    public class ViewModel : OnPropertyChangedClass
    {
        private bool _value;
        /// <summary>Неизменяемое свойство для привязок в View.
        /// Значение свойства может изменить только сама ViewModel</summary>
        public bool Value { get => _value; private set => SetProperty(ref _value, value); }
 
        private RelayCommand _changeCommand;
        /// <summary>Команда изменяющее значение Value</summary>
        public RelayCommand ChangeCommand => _changeCommand
               ?? (_changeCommand = new RelayCommand(_ => Value = !Value));
 
        private RelayCommand _messageShowCommand;
        /// <summary>Команда показывающая "Привет!"
        /// В команду передаётся методо её состояния.
        /// В это методе проверяется полученный параметр команды.
        /// Если равен <see langword="true"/>, то  команду можно исполнить</summary>
        public RelayCommand MessageShowCommand => _messageShowCommand
            ?? (_messageShowCommand = new RelayCommand(_ => MessageBox.Show("Привет!"), p => p is bool val && val));
    }
Я сделал так и у меня не работает. Зачем этот код нужен? Или это и есть окно 1?
0
Модератор
Эксперт .NET
12189 / 8718 / 2374
Регистрация: 21.04.2018
Сообщений: 26,069
Записей в блоге: 2
22.03.2020, 18:39 8
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Я сделал так и у меня не работает. Зачем этот код нужен? Или это и есть окно 1?
Этот код называется ViewModel.
И он служит (в данном) для передачи данных между окнами.

Вы знаете что такое привязки, контекст данных, команды?
0
4 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 493
22.03.2020, 18:45  [ТС] 9
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вы знаете что такое привязки, контекст данных, команды?
Нет.

Добавлено через 3 минуты
Элд Хасп, Вот у меня задание такое: В приложении должен быть описан класс "студент", приложение позволяет создавать объект "студента" и заполнять его свойства с помощью мастера (последовательности окон с полями ввода и кнопками "дальше", "назад", "отмена"). После завершения создания "студента", информация о нем отображается на главном окне.
Прислать код XAML, C# и скриншоты работы программы.


И там в конце написано, что информация о студенте отображается на главном окне. Надо создавать просто новые окна. Я понял как Binding работает в одном окне, а как сделать чтобы все данные, что я введу появились на главном окне допустим в TextBlock? Я вот этого не могу понять.
0
Модератор
Эксперт .NET
12189 / 8718 / 2374
Регистрация: 21.04.2018
Сообщений: 26,069
Записей в блоге: 2
22.03.2020, 19:04 10
Лучший ответ Сообщение было отмечено Anonymous4722 как решение

Решение

Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Нет.
Это плохо.
WPF без всего этого работать не будет.
Я вам код специально сделанный под ваш пример, но не зная принципов работы с WPF, вы в другой аналогичной задаче то вряд ли сможете его повторить или адаптировать. Я уже не говорю о том, что как-то усложнить задачу.
Нужно понимание азов, основ WPF и MVVM.

Берёте класс отсюда Новая реализация OnPropertyChangedClass [WPF, Элд Хасп]

Изменяете Code-Behind основного окна
C#
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            new Window1()
            { 
                DataContext = DataContext
            }
            .Show();
        }
    }
 
    /// <summary>ViewModel - предназначена для передачи в Контекст Данных окна</summary>
    public class ViewModel : OnPropertyChangedClass
    {
        private string _text;
 
        public string Text { get => _text; set => SetProperty(ref _text, value); }
    }
XAML Основного окна
XML
9
10
11
12
13
14
15
16
17
18
19
20
    mc:Ignorable="d">
    <Window.DataContext>
        <local:ViewModel/>
    </Window.DataContext>
    <Grid>
        <StackPanel>
            <Label Content="Ввести данные студента. Для этого нажмите Далее." FontSize="20"/>
            <Button Content="Далее" Height="50" Width="50" Click="Button_Click"/>
            <TextBlock Text="{Binding Path=Text}" Height="30" />
        </StackPanel>
    </Grid>
</Window>
Xaml дочернего окна
XML
9
10
11
12
13
14
15
16
17
18
    <d:Window.DataContext>
        <local:ViewModel/>
    </d:Window.DataContext>
    <Grid>
        <StackPanel>
            <Label Content="ФИО" FontSize="20"/>
            <TextBox Text="{Binding Text}" Height="30" />
        </StackPanel>
    </Grid>
</Window>
Добавлено через 1 минуту
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Элд Хасп, Вот у меня задание такое:
Вы не сможете "методом тыка" сделать это задание.
1
4 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 493
22.03.2020, 19:37  [ТС] 11
Цитата Сообщение от Элд Хасп Посмотреть сообщение
MVVM
Например мы этого не проходили?
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вы не сможете "методом тыка" сделать это задание.
Я смог, все заработало!
Миниатюры
Как сделать так, когда я ввожу информацию в окне 2, то она появлялась в главном окне тобишь в окне 1?  
0
Модератор
Эксперт .NET
12189 / 8718 / 2374
Регистрация: 21.04.2018
Сообщений: 26,069
Записей в блоге: 2
22.03.2020, 19:43 12
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Например мы этого не проходили?
WPF - это специально созданный инструмент для реализации View в паттерне MVVM.
Очень жаль, что вы это не проходили.
Так как использование WPF вне этого паттерна крайне затрудняет реализацию решения в целом.

Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Я смог, все заработало!
Вариант из предыдущего поста?
0
4 / 2 / 1
Регистрация: 29.11.2012
Сообщений: 493
22.03.2020, 19:50  [ТС] 13
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Очень жаль, что вы это не проходили.
Это задание по теме Элементы управления.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вариант из предыдущего поста?
Да, вариант сработал хорошо, но что-то кода очень много и усложнено все только из-за того, чтобы можно было сохранять информацию на главном окне (или просто там отобразить после завершения ввода в других окнах). Мне кажется можно как-то сделать проще.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Так как использование WPF вне этого паттерна крайне затрудняет реализацию решения в целом.
Да, затруднительно было без знаний.
0
Модератор
Эксперт .NET
12189 / 8718 / 2374
Регистрация: 21.04.2018
Сообщений: 26,069
Записей в блоге: 2
22.03.2020, 19:59 14
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Мне кажется можно как-то сделать проще.
Показано типовое для WPF решение.
Вам оно кажется сложным, скорее всего только из-за очень плохого преподавания вам ООП.

В самом простом случает, для расширения добавляете в ViewModel нужные свойства.
Обязательно используя аналогичную свойству Text реализацию.

Но для обработки кнопок вам надо ещё изучить и понять команды.
Это тоже неотъемлемая часть WPF.
Иначе такую гору костылей наворочаете, что сами разобраться не сможете.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2020, 19:59
Помогаю со студенческими работами здесь

Сделать листбокс в главном окне программы средствами WinAPI
Возможно глупый вопрос поскольку я только только начал изучать с++. Во общем мне поставлена задача...

как обращаться к элементам на главном окне???
Вопрос от чайника........ Я создал пустой прокт в QTCreator с MainWindow......Положил на форму...

Как сделать ссылку, чтобы она открывала страницу в другом окне
Уважаемые господа программисты подскажите пожалуйста как на пхп написать код чтобы из sidebar.php...

Как разместить элементы управления в главном окне?
Здравствуйте! Изучаю сейчас я Win32 API и вот у меня назрел такой вопрос. В моей книге по Win32 API...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru