Dans une application WPF, que je suis en train d'écrire en utilisant le pattern MVVM, j'ai un processus d'arrière-plan qui fait son effet, mais ont besoin pour obtenir des mises à jour de statut de sortir de l'INTERFACE utilisateur.
Je suis en utilisant le pattern MVVM, donc mon ViewModel ne connaît pratiquement rien de la vue (UI) qui est de présenter le modèle de l'utilisateur.
Dire que j'ai la méthode suivante dans mon ViewModel:
public void backgroundWorker_ReportProgress(object sender, ReportProgressArgs e)
{
this.Messages.Add(e.Message);
OnPropertyChanged("Messages");
}
De mon point de vue, j'ai une ListBox lié à la propriété Messages (un List<string>
) du ViewModel. OnPropertyChanged
remplit le rôle de l' INotifyPropertyChanged
interface en appelant un PropertyChangedEventHandler
.
Je dois m'assurer que OnPropertyChanged
est appelée sur le thread d'INTERFACE utilisateur - comment puis-je faire cela? J'ai essayé ce qui suit:
public Dispatcher Dispatcher { get; set; }
public MyViewModel()
{
this.Dispatcher = Dispatcher.CurrentDispatcher;
}
Puis d'ajouter les points suivants à l' OnPropertyChanged
méthode:
if (this.Dispatcher != Dispatcher.CurrentDispatcher)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate
{
OnPropertyChanged(propertyName);
}));
return;
}
mais cela ne fonctionne pas. Des idées?