2010-02-18 26 views
1

我们的异地开发团队创建了一个带有ObservableCollection属性的模型。现在,我负责创建ViewModel,而且我遇到了麻烦,因为上述模型在BackgroundWorker(另一个线程)内运行 - 这意味着我无法通过挂接CollectionChanged事件来更新视图。下面是我做的解决方法:模型中的ObservableCollection + ViewModel中的线程

private Model model = new Model(); 
public ObservableCollection<Entry> Entries { get; set; } 

public ctor() 
{ 
    BackgroundWorker peon = new BackgroundWorker(); 
    peon.DoWork += work; 
    peon.RunWorkerCompleted += updateViewCollection; 
    peon.RunWorkerAsync(); 
} 

private void work(object sender, DoWorkEventArgs e) 
{ 
    model.DoSomething(); 
} 

private void updateViewCollection(object sender, RunWorkerCompletedEventArgs e) 
{ 
    // model.entries is an ObservableCollection<Entry> 
    foreach (Entry en in this.model.entries) 
    { 
     if (!this.Entries.Contains(en)) 
      this.Entries.Add(en); 
    } 
} 

有没有一种更好的方式通过螺纹视图模型挂钩的模型视图的的ObservableCollection的的ObservableCollection?

回答

0

我假设你正在使用wpf或silverlight。 您将事件与单个线程上的相同,但将它们封送回Dispatcher对象(Invoke())。假设你可观察的集合是线程安全的,你应该没有问题。

相关问题