我有一个Silverlight应用程序,我已经实现了M-V-VM模式,因此我的实际UI元素(视图)与数据(模型)分离。无论如何,在用户离开并完成一些选择和可能的其他输入之后的某个时刻,我想异步地通过模型并扫描它并编译用户已更改的optiions列表(与默认值不同),并最终在UI上更新它作为摘要,但这将是最后一步。
我的问题是,如果我使用后台工作程序来执行此操作,直到我实际想要进行UI更新,我只想在我的某个模型中读取当前值,我不需要同步访问模型吧?我只是在修改数据而只是读取当前值...
有列表(ObservableCollections),所以我将不得不调用那些集合的方法,如“_ABCCollection.GetSelectedItems()”,但我只是在读,我不是在做更改。既然它们不是原语,我是否必须同步访问它们才能读取,或者那不重要吗?
我假设我必须同步我的最后一步,因为它会导致PropertyChanged事件触发,最终视图将通过绑定请求新数据......
提前感谢任何建议。
答案 0 :(得分:0)
你是对的。您可以在工作线程上读取Model对象和ObservableCollections,而不会发生跨线程冲突。获取或设置UI元素上的属性值(更具体地说,是从DispatcherObject派生的对象)必须在UI线程上完成(更具体地说,是创建DispatcherObject子类实例的线程)。有关此问题的详细信息,请参阅here。