繁体   English   中英

在WPF中,应用程序MainWindow为空(使用Caliburn Micro)

[英]Application MainWindow is null in WPF (using Caliburn Micro)

我正在开发WPF应用程序,我需要指向控件内应用程序的主窗口。 我正在使用Caliburn Micro。

Application.Current.MainWindownull

如何在Caliburn Micro中获得对应用程序MainWindow的引用?

很好笑,我刚刚在另一篇文章中对此进行了回答...尝试在MainWindow.xaml.cs文件的Loaded事件中设置Application.Current.MainWindow属性:

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

1.了解Application.Current.MainWindow

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

例如,如果在启动时打开LoginWindow ,则Application.Current.MainWindow将为LoginWindow 当您关闭LoginWindowApplication.Current.MainWindow可以是例如Window1

2.访问MainWindow实例

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

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

3. MVVM

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

如果你想在执行某些操作MainWindow ,你应该执行动作MainWindowViewModel 如果打开窗口,它将反映ViewModel中的更改。 如果不是,则不必反映所做的更改。 MainWindowViewModel不应直接引用MainWindow实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM