在WPF的两个窗口之间传递内容
本文关键字:之间 窗口 两个 WPF | 更新日期: 2023-09-27 17:52:16
我的问题是,将一些信息从WPF窗口传递到现有的WPF页面。我想通过按下WPF Page1上的按钮打开一个窗口。然后,我必须得到所有的文本存储在Textbox1到Page1中的一个变量。但只有当用户按下"窗口"上的ButtonXY时。我怎么能解决这个问题,而不使用"绑定",因为必须有一个大的"开关"子句旁边的Page1?
如果你使用MVVM,那么窗口和页面都可以有一个共同的ViewModel和那些文本框应该绑定到相同的属性与UpdateSourceTrigger设置为PropertyChanged,这样就不需要更多的事件或通知。
否则,有时我倾向于创建一个全局项目,它将在需要的地方作为引用添加。这样,您就可以设置事件及其处理程序来完成您的特定问题。我认为这不是一个优雅的解决方案,但它帮助我在不同的项目或类之间进行了很多沟通。
创建一个新类,它将包含您想要在所有窗口之间传输的所有数据。
public YourNewClassWithSettings
{
string StringNumber1;
string StringNumber2;
}
在主窗口中创建该类的实例,并设置所需属性的值。
通过引用将YourNewClassWithSettings的实例传递给下一个窗口的构造函数。
YourNewClassWithSettings test = new YourNewClassWithSettings();
test.StringNumber1 = "mySetting";
WindowControl w = new WindowControl(ref test);
w.ShowDialog();
//See what was changed!!!!
string changedValue = test.StringNumber1; //Will be "IamDone"
在你的构造函数中你会说:
public WindowControl(ref YourNewClassWithSettings test)
{
// example: You can now say TextBox1.Text = test.StringNumber1;
// Whatever you change here like test.
test.StringNumber1 = "IamDone";
//When you close this window, because test was passed by ref : you
// will see StringNumber1 = "IamDone" in your main window again
//when accessing the property of that class. Always pass by ref
this.Close();
}
假设您有一个MainWindow
和一个SubWindow
。
您的SubWindow
包含Button
和Textbox
。当你点击SubWindow
中的Button
时,你想把Text
从Textbox
转移到MainWindow
。
主窗口。您实现了一个Property
(Getter和Setter),它将包含传输的Text
字符串。MainWindow
也包含SubWindow
!不要忘记将MainWindow
传递给SubWindow
构造函数(如下所示),以便SubWindow
知道MainWindow
实例
public partial class MainWindow : Window
{
public string Text { get; set; }
private Window subWindow;
public MainWindow()
{
InitializeComponent();
subWindow = new SubWindow(this);
subWindow.Show();
}
}
好子窗口
public partial class SubWindow : Window
{
private Window mainWindow;
public SubWindow(Window mainWindow)
{
this.mainWindow = mainWindow;
InitializeComponent();
}
private void ButtonTransferTheData_Click(object sender, RoutedEventArgs e)
{
mainWindow.Text = myTextBoxInSubWindow.Text;
}
}
你的SubWindow
知道MainWindow
。所以你可以访问Text Property
。在按钮上单击您将Text
从Textbox
写入MainWindow
的Property
。
提示mainWindow.Text = myTextBoxInSubWindow.Text;
行可能抛出异常。这是因为您希望从另一个线程访问一个线程。所以你需要调度它。将这一行改为:
Dispatcher.Invoke(() => mainWindow.Text = myTextBoxInSubWindow.Text);