Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF中的应用程序主窗口为空(使用Caliburn Micro)_C#_Wpf_Caliburn.micro - Fatal编程技术网

C# WPF中的应用程序主窗口为空(使用Caliburn Micro)

C# WPF中的应用程序主窗口为空(使用Caliburn Micro),c#,wpf,caliburn.micro,C#,Wpf,Caliburn.micro,我正在开发一个WPF应用程序,我需要在控件中获得一个指向应用程序主窗口的点。我用的是Caliburn Micro Application.Current.main窗口为null 我怎样才能获得Caliburn Micro应用程序的主窗口的引用?这很有趣,我刚刚在另一篇文章中回答了这个问题。。。尝试在MainWindow.xaml.cs文件中的Loaded事件中设置Application.Current.MainWindow属性: private void MainWindow_Loaded(ob

我正在开发一个WPF应用程序,我需要在控件中获得一个指向应用程序主窗口的点。我用的是Caliburn Micro

Application.Current.main窗口
null


我怎样才能获得Caliburn Micro应用程序的
主窗口的引用?

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

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

1。了解Application.Current.main窗口

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

e、 g.如果在启动时打开
LoginWindow
,则
Application.Current.main窗口将是
LoginWindow
。当您关闭
LoginWindow
时,例如
Application.Current.main窗口可以是
Window1

2。访问主窗口实例

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

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

3。MVVM

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


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

有趣的是,我几分钟前刚刚看到那篇文章。我试过这个,在我设置它之前,我检查了它,它被设置了(但再次设置),但后来它再次为空,你知道是什么原因吗?据我所知,我的应用程序从未设置过该值,所以是否有WPF通用场景可以将其设置为null?抱歉,但我不知道会发生这种情况。。。这在我身上从未发生过,但如果您使用任何第三方框架,出于某种原因,他们可能会这样做。Application.MainWindow会自动设置为应用程序中打开的第一个窗口。当窗口关闭时,它要么被设置为下一个打开的窗口,要么在没有打开的窗口的情况下被设置为null。我对WPF几乎没有经验,但第二点中的信息似乎不精确。我认为WPF中不存在“MainWindow类”,并且,[文档明确指出]第一项应用程序。Windows不一定是主窗口:“如果随后使用对不同窗口的引用设置主窗口,则引用主窗口的项目的位置将更改,而窗口中项目的顺序保持不变。”。因此,始终使用MainWindow来引用主窗口,而不是Windows中的第一项。“@TomaszMaczyński:修复了,谢谢!这只是一个匹配问题。这里的type()的类型参数
是缺少的棘手部分