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

时间:2013-09-06 14:33:09

标签: c# wpf caliburn.micro

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

Application.Current.MainWindownull

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

2 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:3)

<强> 1。了解Application.Current.MainWindow

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

e.g。如果您在启动时打开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实例。