WPF MVVM面板切换与图表控制耗时太长

时间:2013-10-04 11:39:52

标签: c# wpf mvvm

我有一个WPF界面,其中有一个面板,用于显示您从按钮栏中选择的特定选项的详细信息。例如,如果单击“信息”按钮,则详细信息窗格将填充InfoDetailUserControl。如果单击“图形”按钮,则会使用GraphDetailUserControl填充。

我这样做的方法是将每个细节面板定义为UserControl。然后,我为每个驱动数据的UserControl都有一个ViewModel。详细信息面板由ContentControl表示,为了显示相关面板,我将其内容设置为表示我想要显示的UserControl的ViewModel。然后我有一些将ViewModel映射到UserControl的DataTemplates,这样当你将VM添加到ContentControl时,它会查找该类型的datatemplate并显示相关的UserControl。

示例数据表。

  <DataTemplate DataType="{x:Type RunResults:SimpleCalcInfoResultViewModel}">
        <Views:SimpleCalcInfoResult />
    </DataTemplate>

    <DataTemplate DataType="{x:Type RunResults:TradeResultViewModel}">
        <Views:TradeResult />
    </DataTemplate>

    <DataTemplate DataType="{x:Type RunResults:GraphResultViewModel}">
        <Views:GraphResult />
    </DataTemplate>

    <DataTemplate DataType="{x:Type RunResults:NoResultViewModel}">
        <Views:NoResult />
    </DataTemplate>

这一切都运行正常,但问题是每次更改详细信息面板的内容时,都会为其提供ViewModel类,然后它会动态查找与VM类型匹配的datatemplate并创建一个UserControl的实例。然后,当您切换到其他类型时,它会丢弃该UserControl。因此,如果您继续在Info和Graph视图之间切换,它会在每次返回时继续重新创建GraphUserControl,它不会从第一次加载缓存它,只是再次重新显示相同的视图。

我遇到的问题是Graph UserControl在InitializeComponent()调用中需要3-4秒才能初始化。我假设这只是WPF工具包图表控件很慢但它意味着用户每次返回Graph视图时都必须等待4秒,这是不理想的。

有没有办法可以轻松缓存创建的第一个UserControl,因此它只进行一次初始化,或者有没有办法可以简单地加速Chart控件的加载?

非常感谢

0 个答案:

没有答案