2010-12-02 41 views
0

我在WPF应用程序包括以下组件:WPF性能退化在UI渲染

(1)窗口

(2)ContentPresenter在Window绑定到在底层视图模型的特性。该属性引用另一个ViewModel。

(3)ViewModel的DataTemplate将绑定到上面引用的ContentPresenter。此数据模板实例化显示一些数据的第三方网格。

无论何时ContentPresenter从DataTemplate呈现数据,UI需要大约三到四秒的时间才能呈现。这会导致UI在呈现内容所需的时间内挂起。由于我几乎无法控制第三方控件如何呈现自己 - 我的问题涉及是否有可能以UI不会挂起的方式呈现内容。

请指教。

感谢。

Chris

回答

1

网格显示的行数是多少?在屏幕上可以看到多少行?

我在问,因为有可能您的UI布局会破坏虚拟化。通常,显示可滚动数据列表的控件将执行虚拟化。 (内置的ListBox可以做到这一点,任何可接受质量的第三方网格都应该这样做。)这对性能至关重要,因为这意味着您的用户界面只需要实例化那些实际可见的项目,而不是实例中的任何内容名单。

但是意外击败这个虚拟化是相对容易的。一种方法是将列表或网格控件包装在ScrollViewer中。您需要虚拟化控件才能管理自己的虚拟化滚动功能,因此滚动需要在内部进行。用ScrollViewer包装控件可以防止它自己滚动。如果你插入不同的ItemsPanel,它可能会出错的另一种方法。第三种可能性是您的列表/网格控件实际上需要被告知使用虚拟化。

但是,如果您使用的控件只需要很长时间来呈现屏幕上显示的内容,那么您可以做的事情不多 - 您需要联系控件供应商,或考虑使用不同的供应商...