【发布时间】:2018-07-09 22:59:45
【问题描述】:
我正在 WPF 中开发一个应用程序。我需要加载一个填充表单的 Window 类的实例(我在这里称之为 Win1)。然后,当单击提交按钮时,Win1 关闭,然后才能加载新的 Win2 窗口(另一个类,也继承自 Window)。问题是它们都打开了,我无法同步从第一个 Win1 获得的数据并将它们传递给第二个 Win2。我只是搞砸了。
有人可以给我一个通用的想法,指出我需要执行上述操作的工具和模式。对于给我的规范,Win2必须在Win1完成工作后才出现。
尽管应用程序比我现在描述的要复杂,但我想发布一些代码,但我设法混淆了谁在阅读我的想法,所以我告诉你,目前我正在管理在 App.cs 的构造函数中的 windows,而 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...
}
对我来说最大的问题是将User数据传递给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);
}
//...
}
我意识到我已经向自己解释了一些“重读我的问题好几次”。因此,我通过在此处报告我对其中一位 cmets 的回答来更新它以使其更清晰。
UserLoad 方法不是阻塞的,因为它内部是继承 Window 的实例化类(换句话说,用于登录和注册的其他窗口)然后执行流程继续并实例化 MainWindow,其中参数“user”自然会导致 null因为表格还没有填写。我现在意识到,也许我对自己的解释很糟糕。 Win1 的调用没有阻塞,我希望它仅在用户数据准备好作为参数传递给 Win2 时返回。
【问题讨论】:
-
发布您的 MainWindow 构造函数...应该看起来像 public MainWindow(UserType user, GamesType games){}
-
您有几个问题。从将代码移出构造函数开始(使用event 或覆盖
App)。任何不在 wpf 中使用 MVVE 的人都必须尽快研究它。然后你的“同步”基本上是从另一个视图模型中调用一个视图模型的成员。 -
老实说,我什至不知道我做事是否正确。如果你觉得这种方法完全错误,我有时间研究一些手册,所以不要麻烦告诉我贴的代码很烂! :-P
-
但是话说回来……为什么你传球有困难,看起来你的传球做得正确?有什么问题?
-
@kitsune 正如 Nawed 所说,您应该阅读 MVVM。可以通过对两个不同的视图使用相同的模型来实现同步。
标签: c# wpf synchronization