应用程序MainWindow在WPF中为空(使用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,则它将返回null。 不要试图解决这个问题 – 如果MainWindow尚未打开,或者它已经关闭,则不应该访问它。
3. MVVM
在MVVM模式中,您不应直接从视图模型访问视图。 如果你这样做了,你就会打破主要的MVVM问题,例如关注点分离,可测试性等等。问题是,为什么你想要mvvm。
如果要在MainWindow
执行某些操作,则应在MainWindow
执行操作。 如果窗口打开,它将反映ViewModel中的更改。 如果不是,则不必反映更改。 MainWindowViewModel
不应该直接引用MainWindow
实例。