数据触发器(DataTrigger)与使用转换器的数据绑定性能各如何?

22

我有很多样式定义在我的网格中(基于状态的单元格颜色等)。目前,我使用DataTriggers来设置适当的颜色。我希望改进我的应用程序的性能,并认为大量的样式可能会导致减速(由于数据不断变化,需要重新计算/刷新样式)。使用转换器进行数据绑定是否比使用DataTriggers更好?

如果两种方法都可以实现目标,是否存在性能差异?我不熟悉背后正在发生什么,所以无法确定。

2个回答

19
Hanselminutes podcast的这一期中,嘉宾Laurent Bugnion(MVVM Light的创建者)描述了使用转换器会带来性能损失。他指出,在桌面应用程序中,这几乎总是可以忽略不计的,但在WP7应用程序中,建议视图模型直接公开诸如画笔之类的内容,而不是过度依赖转换器,特别是在处理列表虚拟化时,此时滚动将导致许多调用转换操作。

在您的情况下可能发生类似的事情,只是由于触发器的数量(或如果您进行了转换,则为转换)。

作为概念证明,您可以考虑将视图模型包装在“WPF ViewModel”中,该模型公开颜色和其他特定于WPF的值本身,而不是某个值,运行时可以通过调用触发器和IValueConverters确定颜色。然后,您将能够直接绑定到它,并且既不使用触发器也不使用转换器。我很想听听结果。


0
在我们的软件中,我更改了2000个使用转换器的数据绑定,将其改为使用样式中的数据触发器(主要是VisibleIfTrueConverters)。不幸的是,这并没有带来任何性能上的差异。即使在具有大量可见或折叠控件的ItemsControls和ListBoxes中,视图加载时间也都是8秒。因此,我撤销了这些更改,以减少代码行数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接