我正在使用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的性能如此差?还是我错过了什么?还是错的?
非常感谢。
答案 0 :(得分:1)
有几件事需要思考......
问题可能是由于您的数据模板显示的内容。你可以快速测试一下。只需将数据模板中的视图替换为更简单的基本视图,例如一堆文本块和文本框。现在需要同样的时间吗?如果没有,则您的视图需要时间来加载而不是数据模板。
如果你的观点很慢,那么检查你的风格是否很慢。您是否使用软件加速来模糊,发光等效果?如果是这样,请切换到硬件加速效果。
问题还可能是由于在数据模板加载时,数据模板可能从后端服务 / database中获取数据。你能否在不同的线程上委托加载这些数据?因为如果你没有,那么它将在GUI上执行,从而挂起GUI。
您是否正在显示列表项?您的项目控件(基本项目控件,列表框,列表视图,树视图,数据网格)是否显示虚拟化项目列表?您是否在该列表中应用任何默认分组或排序?如果是,则在可能的情况下使用LINQ应用分组或排序。使用虚拟物品控件。
答案 1 :(得分:1)
我已经对此进行了评论,但我会在此发布作为答案,因为我认为这可能是您的主要问题:
每次点击代码时,您都在加载和解析Views.xaml
的内容 - 这会影响性能。
如果在调用之间缓存该行的输出,您会看到更好的结果。
答案 2 :(得分:0)
在我做任何其他事情之前,我会首先检查我的数据绑定是否正确。
只需打开调试窗口,看看是否有任何绑定警告。如果您对此感到满意,则问题出在您的视图中,而不是数据模板。如果是这种情况,AngelWPF的答案给出了很多关于该怎么做的提示。