我有一个 WPF 界面,它有一个面板,用于显示您从按钮栏中选择的特定选项的详细信息。例如,如果您单击信息按钮,详细信息窗格将填充 InfoDetailUserControl。如果单击 Graph 按钮,它会填充 GraphDetailUserControl。
我这样做的方式是将每个细节面板定义为一个用户控件。然后,我为每个驱动数据的 UserControl 提供了一个 ViewModel。详细信息面板由 ContentControl 表示,为了显示相关面板,我将其内容设置为代表我要显示的 UserControl 的 ViewModel。然后,我有许多将 ViewModel 映射到 UserControl 的 DataTemplate,因此当您将 VM 添加到 ContentControl 时,它会查找该类型的数据模板并显示相关的 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 类型匹配的数据模板并创建该实例用户控件。然后,当您切换到其他类型时,它会丢弃该 UserControl。因此,例如,如果您不断在 Info 和 Graph 视图之间切换,它会在您每次返回时重新创建 GraphUserControl,它不会从第一次加载时缓存它,而只是再次重新显示相同的视图。
我遇到的问题是 Graph UserControl 在 InitializeComponent() 调用中需要 3-4 秒来初始化。我假设这只是 WPF 工具包图表控件运行缓慢,但这意味着用户每次返回图表视图时必须等待 4 秒,这并不理想。
有没有一种方法可以轻松地缓存创建的第一个 UserControl,以便它只经历一次初始化,或者有没有一种方法可以简单地加快 Chart 控件的加载速度?
非常感谢