TextBox UpdateSourceTrigger = PropertyChanged - 它真的会影响性能吗?

时间:2011-06-30 08:59:36

标签: wpf performance binding updatesourcetrigger

MSDN文档声明:

  

双向或双向的绑定   OneWayToSource监听变化   目标属性并传播它们   回到源头。这被称为   更新来源。通常,这些   每当目标时都会发生更新   财产变化。这很好   复选框和其他简单的控件,   但它通常不适合   文本字段。 每次更新后更新   击键可以降低性能和   它通常会否认用户   退格和修复的机会   在提交之前输入错误   新的价值。因此,默认   Text的UpdateSourceTrigger值   属性是LostFocus而不是   的PropertyChanged。

据我所知,在更新直接发送到数据库或网络中,或者数据量非常大的情况下,在TextBox上使用UpdateSourceTrigger = PropertyChanged确实会降低性能。

但是如果它只是更新一个简单的DependencyProperty,或者是Entity Framework对象的一个​​属性(在提交之前),那么性能是否会被忽略不计?

只是想知道,因为我正在创建一个WPF应用程序,它跟踪正在编辑的对象的状态,并根据是否进行了更改来优化“保存”按钮的外观。我认为确定更改的最简单方法是捕获相关的SourceUpdated事件。当文本框的UpdateSourceTrigger = PropertyChanged时,它可以最佳地工作,因为用户可以获得有“可保存”更改的即时反馈。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您被告知性能下降的原因是,在大多数情况下,如果您需要在每次击键时更新源属性,那是因为您需要在属性值更改时发生某些事情。毕竟,如果你不需要那些“某事”发生,你就不会在财产更新时真正关心,只要它最终完成。

对性能的真正影响完全取决于“某事”是什么。这完全取决于您的应用程序。如果“某事”正在格式化并在另一个TextBlock中显示该值,那么在每次击键时执行此操作可能都不会引人注意。如果它正在过滤10,000行DataTable并刷新绑定到它的DataGrid,它可能会。

那你怎么说?嗯,有两种方法:

1)了解您的申请。如果您在更新源属性时知道应用程序正在执行的操作,则可以预测在每次击键操作时是否会出现问题。当你说“我想我想知道它一开始是不是很好,但实际上在某些我不知道的情况下会引起问题”,你真正说的是,“如果我不知道会发生什么?当用户按下某个键时,我知道我的应用程序在做什么吗?“

2)如果您在用户按下某个键时不知道您的应用程序正在执行的操作,请对其进行概要分析。