C# 将值从主窗口传递到子窗口,然后将多个值从子窗口返回到主窗口

C# 将值从主窗口传递到子窗口,然后将多个值从子窗口返回到主窗口,c#,wpf,C#,Wpf,我有一个主窗口,希望将一个值传递给一个弹出窗口(该窗口将使用该值根据该值设置一些其他值)。弹出窗口有多个用于用户输入的文本框。当按下一个名为SaveButton的按钮时,我希望将用户输入(全部)发送回主窗口。我怎样才能做到这一点 我对C#很陌生,我知道也有类似的问题。然而,我在根据我的具体情况调整答案方面遇到了困难。感谢您在回答时牢记这一点 非常感谢你 编辑:关于代码 我拥有的代码: 用于启动弹出窗口(这是一个称为弹出窗口的窗口WPF) PopUp.xaml.cs是空的,除了按钮的click事

我有一个主窗口,希望将一个值传递给一个弹出窗口(该窗口将使用该值根据该值设置一些其他值)。弹出窗口有多个用于用户输入的文本框。当按下一个名为SaveButton的按钮时,我希望将用户输入(全部)发送回主窗口。我怎样才能做到这一点

我对C#很陌生,我知道也有类似的问题。然而,我在根据我的具体情况调整答案方面遇到了困难。感谢您在回答时牢记这一点

非常感谢你


编辑:关于代码 我拥有的代码: 用于启动弹出窗口(这是一个称为弹出窗口的窗口WPF)

PopUp.xaml.cs是空的,除了按钮的click事件的标准内容和eventhandler

看看这个:

您的主窗口:

namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    //Defining public or internal parameters
    public int MainWindowProp1 { get; set; }
    public string MainWindowProp2 { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        this.Loaded += MainWindow_Loaded;
    }

    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        //When you call your child window, pass this (mainwindow) as parameter.
        childWindow cw = new WpfApplication1.childWindow(this);
        cw.Param2 = "test";
        cw.Param1 = 12;
        cw.Closed += Cw_Closed;
        cw.ShowDialog();
    }

    private void Cw_Closed(object sender, EventArgs e)
    {
        //On closed event, you can cast the sender as your child window.
        var child = (sender as childWindow);
        var param1 = child.Param1;
        var param3 = child.Param2;
    }

    public void TestMethod()
    {
        //do anything you want
    }
}
}
命名空间WpfApplication1
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
//定义公共或内部参数
公共int MainWindowProp1{get;set;}
公共字符串MainWindowProp2{get;set;}
公共主窗口()
{
初始化组件();
this.Loaded+=主窗口\u Loaded;
}
已加载私有void主窗口(对象发送器、路由目标)
{
//调用子窗口时,将此(mainwindow)作为参数传递。
childWindow cw=新的WpfApplication1.childWindow(此);
cw.Param2=“测试”;
cw.Param1=12;
连续关闭+=连续关闭;
cw.ShowDialog();
}
私有无效Cw_已关闭(对象发送方,事件参数e)
{
//在关闭事件时,您可以将发件人强制转换为您的子窗口。
var child=(发送方为childWindow);
var param1=child.param1;
var param3=child.Param2;
}
公共void TestMethod()
{
//你想做什么就做什么
}
}
}
和您的孩子窗口:

namespace WpfApplication1
{
/// <summary>
/// Interaction logic for childWindow.xaml
/// </summary>
public partial class childWindow : Window
{
    //declare Mainwindow as a parameter in your child window
    public MainWindow mainWindow;
    public int Param1 { get; set; }
    public string Param2 { get; set; }
    //Add a parameter in your child window contructor.
    public childWindow(MainWindow _mainWindow)
    {
        InitializeComponent();
        //Assign your global parameter mainWindow to the _mainWindow parameter. 
        this.mainWindow = _mainWindow;
        this.Loaded += ChildWindow_Loaded;
    }

    private void ChildWindow_Loaded(object sender, RoutedEventArgs e)
    {

        //You can get or set your main window properties. 
        this.mainWindow.MainWindowProp1 = 5;
        this.mainWindow.MainWindowProp2 = "test";

        //You can call methods ant events etc.. of your main window too (depending on acces modifiers).
      this.mainWindow.TestMethod();
    }
}
}
命名空间WpfApplication1
{
/// 
///childWindow.xaml的交互逻辑
/// 
公共部分类子窗口:窗口
{
//将Mainwindow声明为子窗口中的参数
公共主窗口主窗口;
公共int参数1{get;set;}
公共字符串Param2{get;set;}
//在子窗口构造函数中添加参数。
公共子窗口(主窗口\u主窗口)
{
初始化组件();
//将全局参数mainWindow指定给_mainWindow参数。
this.mainWindow=\u mainWindow;
this.Loaded+=ChildWindow\u Loaded;
}
已加载私有无效子窗口(对象发送方,路由目标)
{
//您可以获取或设置主窗口属性。
this.mainWindow.MainWindowProp1=5;
this.mainWindow.MainWindowProp2=“测试”;
//您也可以调用主窗口的方法和事件等(取决于访问修饰符)。
this.mainWindow.TestMethod();
}
}
}

一般来说,最简单的解决方案是:

从主窗口到子窗口(窗口1)

从子窗口到主窗口

((MainWindow)Application.Current.MainWindow).label2.Content = "whatever";

大家好,欢迎来到社区。您应该向我们提供一些您正在使用的代码,以便我们提供帮助。您是将弹出窗口显示为对话框(阻止)还是独立的第二个窗口?我现在将为我的问题添加一些代码!如果弹出类继承System.Windows.Window,则应为其添加构造函数,并通过使用该构造函数实例化来将任何信息传递给窗口。这里有一个简单的例子:
((Window1)Application.Current.Windows[1]).testlabel.Content = "In Sync";
((MainWindow)Application.Current.MainWindow).label2.Content = "whatever";