【问题标题】:Detecting changes/events in Main Window from other windows从其他窗口检测主窗口中的更改/事件
【发布时间】:2021-07-11 22:00:29
【问题描述】:
  • 我有一个带有按钮和 DataGrid 的主窗口。
  • SQL 连接完成后,DataGrid 将填充数据。
  • 要建立 SQL 连接,我单击按钮会启动一个新窗口,我可以在其中输入参数以在所需的服务器和数据库上建立连接。
  • 当我单击此窗口的连接按钮时,如果成功,则窗口关闭,主窗口 DataGrids 将填充相应的数据。

我的问题:我找不到让主窗口知道连接已完成并且它必须启动我的方法来显示数据的方法。

SQL 连接和 DataGrid 填充工作正常。打开主窗口时我无法调用我的方法(因为连接尚未完成)并且我无法先打开连接窗口,因为如果我想稍后更改数据库,我会再次单击连接按钮以进行一个新的连接,我希望我的主窗口能够捕捉到变化并显示新数据。

我从昨天开始就在做,但我还没有找到一种工作方法(或者我能真正理解的方法^^)来完成这项工作。

我对 WPF 很陌生,所以也许有一个我不知道的功能可以实现它?

谢谢!

【问题讨论】:

  • 不是功能而是架构。您的应用程序应该实现 MVVM 架构模式,并且两个窗口都应该使用一个通用的视图模型实例。
  • 我确实使用了这种模式,但我对它的理解还不够,无法知道通用视图模型在这种情况下如何帮助我。
  • 在打开它之前将具有连接相关属性的视图模型对象传递给参数窗口的 DataContext。窗口中的 UI 元素将双向绑定到这些属性。窗口关闭后,您仍然拥有视图模型对象并且可以访问其属性。视图模型对象甚至可以具有 ICommand 属性,参数窗口中的 Apply 或 Ok 按钮将绑定到该属性。该命令将建立数据库连接。
  • 我有类似的东西可以在窗口之间传递我的数据。我已经尝试将它用于我的问题但没有成功。不过我可以试试 ICommand。

标签: c# wpf


【解决方案1】:

例如,您可以为MainWindow 中的连接窗口处理Closed 事件:

ConnectionWindow win = new ConnectionWindow();
EventHandler eventHandler = null;
eventHandler = (ss, ee) =>
{
    win.Closed -= eventHandler;
    //here the connection window is closed...
};
win.Closed += eventHandler;
win.Show();

当窗口关闭时会引发此事件,然后您可以在事件处理程序中做任何您想做的事情。

【讨论】:

  • 这是我尝试过的解决方案之一,但我必须用错了,因为它从来没有用过。我再试试看。
猜你喜欢
  • 2016-11-08
  • 1970-01-01
  • 2014-08-07
  • 2014-01-16
  • 2013-04-29
  • 2011-08-26
  • 2019-06-15
  • 1970-01-01
  • 2019-11-25
相关资源
最近更新 更多