Bindings that are TwoWay or
OneWayToSource listen for changes in
the target property and propagate them
back to the source. This is known as
updating the source. Usually, these
updates happen whenever the target
property changes. This is fine for
check boxes and other simple controls,
but it is usually not appropriate for
text fields. Updating after every
keystroke can diminish performance and
it denies the user the usual
opportunity to backspace and fix
typing errors before committing to the
new value. Therefore, the default
UpdateSourceTrigger value of the Text
property is LostFocus and not
PropertyChanged.
据我所知,在更新直接发送到数据库或网络中,或者数据量非常大的情况下,在TextBoxes上使用UpdateSourceTrigger = PropertyChanged确实会降低性能.
但是,如果它只是更新一个简单的DependencyProperty,或者一个Entity Framework对象的属性(在提交之前),性能是否会被忽略?
只是想知道,因为我正在创建一个WPF应用程序,它跟踪正在编辑的对象的状态,并根据是否进行了更改来优化“保存”按钮的外观.我认为确定更改的最简单方法是捕获相关的SourceUpdated事件.当UpdateSourceTrigger = PropertyChanged用于文本框时,它可以最佳地工作,因为用户可以获得有“可保存”更改的即时反馈.
你被警告性能下降的原因是,在大多数情况下,如果你需要在每次击键时更新源属性,那是因为你需要在属性值发生变化时发生一些事情.毕竟,如果你不需要那种“某种东西”发生,你就不会真正关心财产何时更新,只要它最终确实如此.对性能的真正影响完全取决于“某事”是什么.这完全取决于您的应用程序.如果“某事”正在格式化并在另一个TextBlock中显示该值,那么在每次击键时执行它可能都不会引人注意.如果它正在过滤10,000行DataTable并刷新绑定到它的DataGrid,它可能会.
那你怎么说呢?嗯,有两种方法:
1)了解您的申请.如果您在更新源属性时知道应用程序正在执行的操作,则可以预测在每次击键操作时是否会出现问题.当你说“我想我想知道它一开始是不是很好,但实际上在某些我不知道的情况下会引起问题”,你真正说的是,“如果我不知道会发生什么?知道当用户按下某个键时我的应用程序在做什么吗?“
2)如果您在用户按下某个键时不知道您的应用程序正在执行的操作,请对其进行概要分析.