DataTemplate切换性能

时间:2012-03-13 03:20:04

标签: wpf performance datatemplate

我正在使用DataTemplate来动态更改我的UI视图。

然而,我发现这种表现是非常不可接受的。

这是我的代码:

Xaml(Views.xaml):

<ResourceDictionary> 
    <DataTemplate .... x:name="D1" ....../>
    <DataTemplate .... x:name="D2" ....../>
    <DataTemplate .... x:name="D3" ....../>
    <DataTemplate .... x:name="D4" ....../>
</ResourceDictionary>

代码:

ResoucesDictionary RD = Application.LoadComponent(new Uri("../Views.xaml", UriKind.Relative)) as ResourceDictionary;

if (...condition..)
{
    MyGroupBox.ContentTemplate = RD["D1"] as DataTemplate;
}
else if (....condition...)
{
    MyGroupBox.ContentTemplate = RD["D2"] as DataTemplate;
}
.....
.....
....
.
....
else
{
.......
}

MyGroupBox是我的UI中的GroupBox实例。我想在运行时更改GroupBox的视图,以便我使用DataTemplate。

然而,我发现它在&gt;之后显示正确的用户界面。每当触发特定条件时0.5秒。

DataTemplate的性能如此差?还是我错过了什么?还是错的?

非常感谢。

3 个答案:

答案 0 :(得分:1)

有几件事需要思考......

  1. 问题可能是由于您的数据模板显示的内容。你可以快速测试一下。只需将数据模板中的视图替换为更简单的基本视图,例如一堆文本块和文本框。现在需要同样的时间吗?如果没有,则您的视图需要时间来加载而不是数据模板。

  2. 如果你的观点很慢,那么检查你的风格是否很慢。您是否使用软件加速来模糊,发光等效果?如果是这样,请切换到硬件加速效果。

  3. 问题还可能是由于在数据模板加载时,数据模板可能从后端服务 / database中获取数据。你能否在不同的线程上委托加载这些数据?因为如果你没有,那么它将在GUI上执行,从而挂起GUI。

  4. 您是否正在显示列表项?您的项目控件(基本项目控件,列表框,列表视图,树视图,数据网格)是否显示虚拟化项目列表?您是否在该列表中应用任何默认分组或排序?如果是,则在可能的情况下使用LINQ应用分组或排序。使用虚拟物品控件。

  5. 请检查此帖子中的performance improvements in a WPF GUI

答案 1 :(得分:1)

我已经对此进行了评论,但我会在此发布作为答案,因为我认为这可能是您的主要问题:

每次点击代码时,您都在加载和解析Views.xaml的内容 - 这会影响性能。

如果在调用之间缓存该行的输出,您会看到更好的结果。

答案 2 :(得分:0)

在我做任何其他事情之前,我会首先检查我的数据绑定是否正确。

只需打开调试窗口,看看是否有任何绑定警告。如果您对此感到满意,则问题出在您的视图中,而不是数据模板。如果是这种情况,AngelWPF的答案给出了很多关于该怎么做的提示。