Notre équipe de développement hors site a créé un modèle avec une propriété ObservableCollection. Maintenant, je suis en charge de créer le ViewModel, et j'ai des problèmes parce que le Modèle s'exécute dans un BackgroundWorker (un autre thread) - ce qui signifie que je ne peux pas mettre à jour la Vue en accrochant les événements CollectionChanged. Voici la solution que je l'ai fait:ObservableCollection dans Model + Threading dans 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);
}
}
Y at-il une meilleure façon d'accrocher le ObservableCollection du modèle à la ObservableCollection de la vue par un filetage ViewModel?