【问题标题】:DataTrigger vs databinding with converter performance wiseDataTrigger 与数据绑定与转换器性能明智
【发布时间】:2011-04-01 21:06:15
【问题描述】:
我为我的网格定义了大量样式(基于状态的单元格颜色等)。现在我使用 DataTriggers 来设置适当的颜色。我希望提高我的应用程序的性能,并认为大量样式可能会导致速度变慢(由于数据不断变化以及需要重新计算/刷新样式)。将数据绑定与转换器而不是 DataTriggers 一起使用会更好吗?
如果使用任何一种方法都可以实现目标,是否有任何性能差异?我不熟悉幕后发生的事情,所以我不能确定。
【问题讨论】:
标签:
wpf
data-binding
triggers
【解决方案1】:
在this episode of the Hanselminutes podcast 中,来宾 Laurent Bugnion(MVVM Light 的创建者)描述了与使用转换器相关的性能损失。他指出它在桌面应用程序中几乎总是可以忽略不计,但在 WP7 应用程序中,建议视图模型直接公开画笔之类的东西,而不是严重依赖转换器,特别是在处理列表虚拟化时,在这种情况下滚动会导致很多转换的调用。
在您的场景中可能会发生类似的事情,只要考虑到触发器的数量(或转换,如果您进行了切换)。
作为概念证明,您可能会考虑将视图模型包装在“WPF 视图模型”中,该模型会公开颜色和其他 WPF 特定值本身,而不是运行时可以从中确定颜色的某个值调用触发器和IValueConverters。然后,您将能够直接绑定到它,并且既不使用触发器也不使用转换器。我很想知道结果。