有没有可能在Backgroundworker中更新ViewModel的UI绑定属性存在潜在问题?我正在尝试在VM与UI绑定时更新VM,而且可能用户正在输入...这里的同步如何工作(我不认为我可以从XAML中使用Lock语句)。
提前感谢。
提前感谢。
PropertyChanged
事件会自动转移到UI线程。INotifyCollectionChanged
的集合,则不会在UI线程上转移CollectionChanged
事件,这将导致异常。因此,如果您修改绑定到 ItemsControl
的集合,则需要使用 Dispatcher.Invoke
(或另一种同步机制)来在UI线程上执行它。另一种选择是使用专门处理将事件转移到正确线程的集合。有关此类集合的示例,请参见 此文章。根据我的Silverlight经验,尝试这样做会导致异常。
基本上,您需要从调度程序线程更新绑定的属性,就像直接修改UI一样。
为了使ViewModel能够在不知道真正的Dispatcher
的情况下执行此操作,我发现创建一个IDispatcher
接口非常有用,然后为测试使用SameThreadDispatcher
,而为生产使用委托给真实对象的SystemDispatcher
。然后将IDispatcher
作为依赖项传递给ViewModel。