我有一个绑定到ViewModel属性的WPF控件。令我惊讶的是(因为这似乎不是WPF的广告功能),从后台线程更改绑定属性似乎没有任何问题。我的UI更新没有异常。这是为什么?从后台线程更新绑定属性是否存在性能问题或其他限制?
我有一个绑定到ViewModel属性的WPF控件。令我惊讶的是(因为这似乎不是WPF的广告功能),从后台线程更改绑定属性似乎没有任何问题。我的UI更新没有异常。这是为什么?从后台线程更新绑定属性是否存在性能问题或其他限制?
WPF会自动确保绑定在主线程上更新。
这不会影响性能。如果有什么问题,最好在后台线程上执行属性更新。将更新调度到主线程会增加在那里执行的工作量。您将同时更新View和ViewModel,而不仅仅是View。通常差异可以忽略不计,但如果频繁发生许多更新,则可能导致UI的响应速度更快地降低。
WPF
负责将绑定的数据传递到 UI 线程。据我所知,这仅适用于标量数据。对于集合,您必须在非 UI 和 UI 线程之间正确管理它。这要看情况。
只有实现了INotifyPropertyChanged接口的属性绑定才会自动更新。DependencyProperties和DependencyObjects具有线程关联性,如果你试图从另一个线程更新它们,它们会抛出异常。
Binding类有一个名为IsAsync的属性,在某些特殊情况下有助于从另一个线程更新属性,以避免阻塞UI。在不需要它之前,你不需要使用它。