[英]Application MainWindow is null in WPF (using Caliburn Micro)
我正在开发WPF应用程序,我需要指向控件内应用程序的主窗口。 我正在使用Caliburn Micro。
Application.Current.MainWindow
为null
如何在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
。 当您关闭LoginWindow
, Application.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.