man*_*ans 7 c# wpf caliburn.micro
我正在开发一个WPF应用程序,我需要指向控件内的主应用程序窗口.我正在使用Caliburn Micro.
Application.Current.MainWindow 是 null
如何MainWindow在Caliburn Micro中获取应用程序的参考?
She*_*dan 15
这很有趣,我刚刚在另一篇文章中回答了这个问题...尝试在文件Application.Current.MainWindow中的Loaded事件中设置属性MainWindow.xaml.cs:
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Application.Current.MainWindow = this;
}
Run Code Online (Sandbox Code Playgroud)
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实例。
| 归档时间: |
|
| 查看次数: |
7000 次 |
| 最近记录: |