我有一个针对MVVM框架开发的WPF应用程序,其中ViewModel构造函数使用TimerCallback设置Timer。
TimerCallback检索ObservableCollection并将其传递给VM上的字段。
我有一个CollectionViewSource,其Source属性设置为ObservableCollection。我正在使用CollectionViewSource,因为我想在Collection上启用过滤。
我发现当TimerCallback尝试将ObservableCollection传递给本地字段时,CollectionViewSource的Source属性有一个异常{“调用线程无法访问此对象,因为另一个线程拥有它。”}。
我理解异常,但我有两个问题:
任何帮助表示赞赏!谢谢, Drammy
答案 0 :(得分:2)
DispatcherTimer
代替您现在使用的计时器类,并确保在UI线程上创建它。ObservableCollection
您的用户界面未更新。答案 1 :(得分:1)
要部分回答您的问题,必须通过UI线程调度UI元素可能观察到的ObservableCollection的任何更新。当我希望在MVVM中执行此操作时,我的策略是将SynchronizationContext注入到我在应用程序启动期间初始化的ViewModel的构造函数中。这为我提供了一种独立于View框架的方式来分派必须与View同步的更新。