Application MainWindow 在 WPF 中为空(使用 Caliburn Micro)

本文关键字:使用 Caliburn Micro MainWindow WPF Application | 更新日期: 2023-09-27 18:30:23

我正在开发一个 WPF 应用程序,我需要指向控件内应用程序的主窗口。我正在使用卡利本微。

Application.Current.MainWindow null

我怎样才能获得卡利本微应用MainWindow的参考?

Application MainWindow 在 WPF 中为空(使用 Caliburn Micro)

这很有趣,我刚刚在另一篇文章中回答了这个问题......尝试在MainWindow.xaml.cs文件的 Loaded 事件中设置 Application.Current.MainWindow 属性:

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    Application.Current.MainWindow = this;
}
1.

了解应用程序.当前.主窗口

当应用程序打开第一个窗口 ( MainWindow.xaml ) 时,该窗口设置为 Application.Current.MainWindow 。当窗口关闭时,另一个当前打开的窗口将设置为 Application.Current.MainWindow 。如果没有打开的窗口,则 Application.Current.MainWindow 设置为 null。

例如,如果您在启动时打开LoginWindow,那么Application.Current.MainWindow将被LoginWindow。例如,当您关闭LoginWindow时,可以Window1 Application.Current.MainWindow

2. 访问主窗口实例

如果要访问 MainWindow 类的实例,则应执行以下操作: Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();

但是,如果未打开主窗口,则它将返回 null。不要尝试解决此问题 - 如果 MainWindow 尚未打开,或者它已经关闭,则不应访问它。

3. MVVM

在 MVVM 模式中,不应直接从视图模型访问视图。如果你这样做了,你将打破主要的MVVM问题,如关注点分离,可测试性等。那么问题来了,你为什么要 mvvm。

如果要在 MainWindow 中执行某些操作,则应在 MainWindowViewModel 上执行该操作。如果窗口打开,它将反映视图模型中的更改。如果不是,则不必反映更改的内容。 MainWindowViewModel不应直接引用MainWindow实例。