2013-10-22 36 views
0

我有一个WPF应用程序,我试图有效切换窗口的内容。我想出了以下的解决方案:UserControl的惰性实例化

App.cs

internal static Lazy<HomeUserControl> HomePage; 

MainWindow.cs

public MainWindow() 
    { 
     InitializeComponent(); 

     Application.Current.MainWindow.Content = App.HomePage; 

    } 

HomeUserControl.cs

public HomeUserControl() 
    { 
     InitializeComponent(); 
    } 

我遇到一个问题,MainWindow.Content基本上被设置为一个空白窗口(它实际上改变了MainWindow的内容)。如果我使用App.MainWindow.Content = new HomePageUserControl(),那么一切正常。但是,我想保留一个页面实例,这就是为什么我在App类中创建一个静态页面的原因。无论是否使用Lazy<>,都会发生此问题。我试了一下,看看HomePage是不是null,我找回了一个标签,上面写着Value is not created.,我敢肯定这是一个未初始化的Lazy<>;但是,这只有在检查App.HomePage == null时才会发生。有任何想法吗?

+1

** XY问题**。你不应该需要这个。 UI元素的加载时间实际上是不可感知的,除非您拥有数千个UI元素,或者将数据或业务逻辑放入不属于它的UI中。 –

+0

@HighCore嗯。如果你谈论的是懒惰地实例化页面,我也想知道,但最终这样做,因为它看起来像是性能提高,即使最小。我是否应该像正常一样将它们实例化,因为我目前没有大量页面? – danielunderwood

+0

是的,我宁愿去标准的方式。 –

回答

1

尝试

Application.Current.MainWindow.Content = App.HomePage.Value; 
相关问题