我可以改变OnCollectionChanged事件从另一个线程改变到ObservableCollections后发射的



我有一个MVVM应用程序。我有observablecollection来保存我的模型。如果OnCollectionChanged被触发我们有&;add&;事件,然后将项目插入到数据库中。

我有一个函数从文件中读取数据,创建模型并将它们添加到集合中。由于我的数据库中的关系,我必须按一定的顺序添加它们。

的例子:

  • Post (Post id, Post number, Post town)
  • 性别(Gender id, Gender)
  • 人员(姓名、职位id、性别id)

所以我会首先制作Post模型,将它们添加到ObservableCollection,然后触发OnCollectionChanged,触发insert。然后我会添加Gender模型,然后是Person模型。首先是ObservableCollection的OnCollectionChanged事件会被解雇,然后ObservableCollection的OnCollectionChanged事件然后是ObservableCollection的OnCollectionChanged事件。

我想把这个导入文件移到背景中。我使用的是一个异步命令,它可以锁,设置BindingOperations。启用lecollectionsynchronization并运行Task.Run。在任务内部,我调用一个方法读取文件并在对象中返回数据,第二个void方法使用锁在ObservableCollections中插入数据。

我的问题是,线程完成后,主线程触发OnCollectionChanged事件交替:

  • 一个Post模型被添加->火灾OnCollectionChanged
  • 添加One Gender模型->火灾OnCollectionChanged
  • 添加一个人->火灾OnCollectionChanged
  • 添加One Post模型
  • 添加One Gender模型
  • 添加一人
  • 等等…

这将导致错误,因为它试图插入尚未插入Gender模型和Post模型的Person模型。这是预期行为吗?我可以更改这些事件触发的顺序吗?

您可以将所有的添加放到一个任务中,或者让任务按顺序开始。

Task.Run(() => 
{
AddPosts();
AddGenders();
AddPersons();
}

这种方式是异步的,但顺序正确。

相关内容

  • 没有找到相关文章

最新更新