文本框 UpdateSourceTrigger = PropertyChanged - 它真的会影响性能吗?

4
MSDN文档说明:
双向或单向到源的绑定会监听目标属性的更改并将其传播回源。这被称为更新源。通常,这些更新发生在目标属性更改时。对于复选框和其他简单控件来说,这很好,但对于文本字段来说通常不合适。每次按键后更新会降低性能,并且会使用户无法在提交新值之前使用退格键和纠正输入错误。因此,Text属性的默认UpdateSourceTrigger值是LostFocus而不是PropertyChanged。
我理解,在直接更新数据库或跨网络进行更新,或者数据量非常大的情况下,对于TextBoxes使用UpdateSourceTrigger = PropertyChanged确实会降低性能。
但是,如果只是更新一个简单的DependencyProperty或Entity Framework对象的属性(在提交之前),那么性能影响是否可以忽略不计?
我只是想知道,因为我正在创建一个WPF应用程序,该应用程序跟踪正在编辑的对象的状态,并根据是否已进行更改来优化保存按钮的外观。我认为捕捉相应的SourceUpdated事件是确定更改的最简单方法。当对于文本框使用UpdateSourceTrigger = PropertyChanged时,它可以实现最佳效果,因为用户可以立即得到有“可保存”更改的反馈。

我认为最好的回答方式是对你的应用程序进行分析。 - jfs
仅凭我的眼睛“视觉”分析,似乎没有性能损失。我想知道它是否一开始看起来很好,但实际上可能会在某些我不知道的情况下引起问题。 - Ross
2个回答

1

如果适用于您的应用程序并且您没有注意到性能显着降低,那么将UpdateSourceTrigger设置为PropertyChanged就没有问题。实际上,如果您正在使用诸如Caliburn.Micro之类的MVVM框架,则它会将此设置为所有TextBox的默认设置。


1
你被警告性能下降的原因是,大多数情况下,如果你需要在每次按键时更新源属性,那么这意味着当属性值更改时需要发生某些事情。毕竟,如果你不需要那个“某些事情”发生,你就不会真正关心属性何时被更新,只要它最终被更新即可。
对性能的实际影响完全取决于那个“某些事情”的内容。这完全取决于你的应用程序。如果那个“某些事情”是格式化并在另一个TextBlock中显示值,则在每次按键时执行它可能不会引起注意。如果它是过滤包含10,000行的DataTable并刷新绑定到它的DataGrid,那么它可能会引起注意。
那么如何判断呢?有两种方法:

1) 理解您的应用程序。如果您知道在更新源属性时应用程序正在做什么,您可以预测每次按键是否会成为问题。当您说“我想知道它一开始可能看起来不错,但实际上可能会在我不知道的某些情况下引起问题”时,您真正想问的是,“如果我不知道用户按键时我的应用程序在做什么会发生什么?”

2) 如果您不知道用户按键时您的应用程序在做什么,请对其进行分析。


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