C# WPF中的应用程序主窗口为空(使用Caliburn Micro)
我正在开发一个WPF应用程序,我需要在控件中获得一个指向应用程序主窗口的点。我用的是Caliburn MicroC# 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
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()的类型参数
是缺少的棘手部分