текстовое поле в главном окне должно изменить содержимое метки во втором окне в wpf - PullRequest
0 голосов
/ 23 октября 2018

Таким образом, я должен преобразовать содержимое метки во втором окне во ввод текстового поля в главном окне.У меня нет проблем с этим в одном окне, но я не знаю, как получить данные через несколько окон.До сих пор у меня было несколько вещей, но я не мог заставить его работать.На данный момент это мой код:

        public void Button_Click(object sender, RoutedEventArgs e)
    {
        label1.Content = textBox1.Text;
        label2.Content = textBox2.Text;
    }

Так что я хочу сделать то же самое, только когда текстовые поля находятся в главном окне, а метки - в окне Window1.Есть простой способ сделать это?Если нет, то что будет лучшей альтернативой?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Если вы отображаете Window1 из MainWindow, вы можете вставить его со ссылкой на MainWindow при создании его экземпляра:

public partial class Window1 : Window
{
    private readonly MainWindow _mainWindow;
    public Window1(MainWindow mainWindow)
    {
        InitializeComponent();
        _mainWindow = mainWindow;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        label1.Content = _mainWindow.textBox1.Text;
        label2.Content = _mainWindow.textBox2.Text;
    }
}

MainWindow:

Window1 win = new Window1(this);
win.Show();

Вы также можете получить ссылку на MainWindow из Window1 следующим образом:

private void Button_Click(object sender, RoutedEventArgs e)
{
    MainWindow mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
    if (mainWindow != null)
    {
        label1.Content = mainWindow.textBox1.Text;
        label2.Content = mainWindow.textBox2.Text;
    }
}

Но я рекомендую вам изучить шаблон проектирования MVVM.Это рекомендуемый шаблон для использования при разработке приложений на основе XAML.

0 голосов
/ 23 октября 2018

Самый простой способ - включить ссылку на экземпляр Window1 в вашем MainWindow.Вы можете написать ...

public void Button_Click(object sender, RoutedEventArgs e)
{
    Window1.label1.Content = textBox1.Text;
    Window1.label2.Content = textBox2.Text;
}

... хотя это может вскоре превратиться в большой клубок спагетти.

Более элегантное решение - создать класс ViewModel сВ обязательных свойствах строки установите DataContext обоих MainWindow и Window1 на один и тот же экземпляр этого класса, а затем привяжите TextBoxes и Labels к этим свойствам.Для синхронизации всех элементов управления нажатие кнопки не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...