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

MSDN文档说明:

TwoWay或OneWayToSource的绑定侦听目标属性的更改并将它们传播回源 . 这称为更新源 . 通常,只要目标属性更改,就会发生这些更新 . 这适用于复选框和其他简单控件,但它通常不适用于文本字段 . 每次击键后更新都会降低性能,并且在提交新值之前,它会拒绝用户退回并修复输入错误的通常机会 . 因此,Text属性的默认UpdateSourceTrigger值是LostFocus而不是PropertyChanged .

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

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

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

回答(2)

2 years ago

你被警告性能下降的原因是,在大多数情况下,如果你需要在每次击键时更新源属性,那是因为你需要在属性值发生变化时发生一些事情 . 毕竟,如果你不需要那种“某种东西”发生,你就不会真正关心 property 何时更新,只要它最终完成 .

对性能的真正影响完全取决于"something"是什么 . 这完全取决于您的应用程序 . 如果"something"正在格式化并在另一个 TextBlock 中显示该值,则在每次击键时执行此操作可能会赢得't be noticeable. If it'过滤10,000行 DataTable 并刷新 DataGrid 绑定到它,它可能会 .

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

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

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

2 years ago

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