En una aplicación WPF que estoy escribiendo utilizando el patrón MVVM, tengo un proceso en segundo plano que lo hace, pero necesita obtener actualizaciones de estado de él a la IU.Asegurándose de que OnPropertyChanged() se invoca en el subproceso UI en la aplicación MVVM WPF
Estoy usando el patrón MVVM, por lo que mi ViewModel no conoce prácticamente nada de la vista (IU) que presenta el modelo al usuario.
Decir que tengo el siguiente método en mi modelo de vista:
public void backgroundWorker_ReportProgress(object sender, ReportProgressArgs e)
{
this.Messages.Add(e.Message);
OnPropertyChanged("Messages");
}
En mi opinión, tengo un cuadro de lista con destino a la propiedad de mensajes (un List<string>
) del modelo de vista. OnPropertyChanged
cumple el rol de la interfaz INotifyPropertyChanged
llamando al PropertyChangedEventHandler
.
Necesito asegurarme de que OnPropertyChanged
se invoca en el hilo de UI, ¿cómo hago esto? He intentado lo siguiente:
public Dispatcher Dispatcher { get; set; }
public MyViewModel()
{
this.Dispatcher = Dispatcher.CurrentDispatcher;
}
A continuación, añadir el siguiente al método OnPropertyChanged
:
if (this.Dispatcher != Dispatcher.CurrentDispatcher)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate
{
OnPropertyChanged(propertyName);
}));
return;
}
pero esto no funcionó. ¿Algunas ideas?
que lo hizo, con otra pequeña modificación - me cambió mi lista a un ObservableCollction y funciona como un encanto. ¡Gracias! –
Si 'Mensajes' es observable, no hay necesidad de llamar a OnPropertyChanged() para ello. – Doug