我为网格定义了大量样式(基于状态的单元格颜色等)。现在我使用DataTriggers设置适当的颜色。我希望改善我的应用程序的性能,并认为大量的样式可能导致速度减慢(由于数据不断变化和需要重新计算/刷新的样式)。使用转换器而不是DataTriggers进行数据绑定是否更好?
如果可以使用任何一种方法实现目标,是否存在性能差异?我不熟悉幕后发生的事情,所以我无法确定。
答案 0 :(得分:14)
在this episode of the Hanselminutes podcast中,嘉宾Laurent Bugnion(MVVM Light的创建者)描述了使用转换器会带来性能损失。他表示在桌面应用程序中几乎总是可以忽略不计,但在WP7应用程序中,建议视图模型直接暴露诸如画笔之类的东西,而不是严重依赖转换器,特别是在处理列表虚拟化时,在这种情况下滚动会导致很多调用转换。
在您的方案中可能会发生类似的事情,只要给出触发器的数量(或者如果您进行了那次转换,则转换)。
作为概念验证,您可以考虑将视图模型包装在" WPF Viewmodel中,"暴露颜色和其他WPF特定值本身,而不是某些值,运行时调用触发器和IValueConverters
可以从中确定颜色。然后,您将能够直接绑定到它,并且既不使用触发器也不使用转换器。我有兴趣听听结果。