c# - 在 WPF 中的两个窗口之间同步数据
问题描述
我正在 WPF 中开发一个应用程序。我需要加载一个填充表单的 Window 类的实例(我在这里称之为Win1 )。然后,当单击提交按钮时,Win1关闭,然后才能加载新的Win2窗口(另一个类,也继承自 Window)。问题是它们都打开了,我无法同步从第一个 Win1 获得的数据并将它们传递给第二个Win2。我只是在搞砸。
有人可以给我一个通用的想法,指出我需要执行上述操作的工具和模式。对于给我的规格,Win2 必须在Win1完成工作后才出现。
尽管应用程序比我现在描述的要复杂,但我想发布一些代码,但我设法混淆了谁在阅读我的想法,所以我告诉你,目前我正在管理内部的窗口App.cs 的构造函数,而MainWindow.cs对应于Win2,我创建了一个新类来实现Win1。
public partial class App : Application
{
// Params...
public App()
{
Client = LoadNetwork();
User = LoadUser(Client); // Shows Win1
Games = LoadMinigames();
mainWindow = new MainWindow(User, Games);
Application.Current.MainWindow = mainWindow; // On XAML default is Hidden
mainWindow.Show(); // Shows Win2
}
// Other methods...
}
对我来说最大的问题是将用户数据传递给MainWindow,我对如何处理这种情况没有太多想法。
更新
public partial class MainWindow : Window
{
public UserLoading ul;
public UserRegistering ur;
public User.UserProfile User;
private List<Game.Game> Games;
public Label Username;
public MainWindow(User.UserProfile user, List<Game.Game> games)
{
User = new UserProfile();
InitializeComponent();
User = user;
Games = games;
Username.Content = User.Username;
DrawList(Games);
}
//...
}
我意识到我已经向自己解释了一些“重读我的问题好几次”。因此,我通过在此处报告我对其中一条评论的回答来更新它,以使其更加清晰。
UserLoad 方法不是阻塞的,因为它内部是继承 Window 的实例化类(换句话说,用于登录和注册的其他窗口)然后执行流程继续并实例化 MainWindow,其中参数“user”自然会导致 null,因为表单还没有被填满。我现在意识到,也许我对自己的解释很糟糕。Win1 的调用没有阻塞,我希望它仅在用户数据准备好作为参数传递给 Win2 时返回。
解决方案
我过去曾这样做过。这是我的解决方案:
将您的启动窗口设置为 Win1。让它启动。在 App.cs 中创建一个静态方法来启动 Win2。当 Win1 可以关闭并且您希望 Win2 从 Win1 中打开调用 App.ShowMainWindow(this) 时。
应用程序.cs
public partial class App : Application
{
static internal void ShowWin2(Win1 win1)
{
Win2 win2 = new Win2();
// Copy Win1 stuff to Win2 here
Application.Current.MainWindow = win2;
win2.Show();
}
}
赢1
public partial class Win1 : Window
{
public Win1()
{
InitializeComponent();
}
private void CloseAndLaunchWin2()
{
App.ShowWin2(this);
this.Close();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
CloseAndLaunchWin2();
}
}
推荐阅读
- ruby - 在 ruby 的末尾打印一些内容
- sql-server - 在 Python Anaconda 环境中运行时,Pyodbc 在 2 小时后失去与 MS SQL Server 的连接
- express - Graphql如何上传多个文件而不仅仅是一个
- groovy - Groovy 闭包中使用的“final”修饰符的处理不一致
- javascript - Chrome 扩展程序 | 通过通配符替换网站 JavaScript 文件
- php - 昨天/上一个时间戳大于今天/现在。如果解决怎么办?
- reactjs - 多个 div 上的 React 中的 OnMouseEnter 无法正常工作
- python - 返回在另一个列表中找到的项目列表
- mongodb - 在 Kubernetes 部署中编写命令 args
- go - json.Marshal 用于带有 echo 的 http post 请求