MSDN文档声明:
双向或双向的绑定 OneWayToSource监听变化 目标属性并传播它们 回到源头。这被称为 更新来源。通常,这些 每当目标时都会发生更新 财产变化。这很好 复选框和其他简单的控件, 但它通常不适合 文本字段。 每次更新后更新 击键可以降低性能和 它通常会否认用户 退格和修复的机会 在提交之前输入错误 新的价值。因此,默认 Text的UpdateSourceTrigger值 属性是LostFocus而不是 的PropertyChanged。
据我所知,在更新直接发送到数据库或网络中,或者数据量非常大的情况下,在TextBox上使用UpdateSourceTrigger = PropertyChanged确实会降低性能。
但是如果它只是更新一个简单的DependencyProperty,或者是Entity Framework对象的一个属性(在提交之前),那么性能是否会被忽略不计?
只是想知道,因为我正在创建一个WPF应用程序,它跟踪正在编辑的对象的状态,并根据是否进行了更改来优化“保存”按钮的外观。我认为确定更改的最简单方法是捕获相关的SourceUpdated事件。当文本框的UpdateSourceTrigger = PropertyChanged时,它可以最佳地工作,因为用户可以获得有“可保存”更改的即时反馈。
答案 0 :(得分:1)
如果它适合您的应用程序并且您没有注意到性能显着下降,那么将UpdateSourceTrigger
设置为PropertyChanged
是没有问题的。实际上,如果您正在使用诸如Caliburn.Micro之类的MVVM框架,那么它会将其设置为所有TextBox的默认设置。
答案 1 :(得分:1)
您被告知性能下降的原因是,在大多数情况下,如果您需要在每次击键时更新源属性,那是因为您需要在属性值更改时发生某些事情。毕竟,如果你不需要那些“某事”发生,你就不会在财产更新时真正关心,只要它最终完成。
对性能的真正影响完全取决于“某事”是什么。这完全取决于您的应用程序。如果“某事”正在格式化并在另一个TextBlock
中显示该值,那么在每次击键时执行此操作可能都不会引人注意。如果它正在过滤10,000行DataTable
并刷新绑定到它的DataGrid
,它可能会。
那你怎么说?嗯,有两种方法:
1)了解您的申请。如果您在更新源属性时知道应用程序正在执行的操作,则可以预测在每次击键操作时是否会出现问题。当你说“我想我想知道它一开始是不是很好,但实际上在某些我不知道的情况下会引起问题”,你真正说的是,“如果我不知道会发生什么?当用户按下某个键时,我知道我的应用程序在做什么吗?“
2)如果您在用户按下某个键时不知道您的应用程序正在执行的操作,请对其进行概要分析。