W aplikacji WPF, którą piszę przy użyciu wzorca MVVM, mam proces w tle, który robi to, ale trzeba pobrać aktualizacje statusu z niego do interfejsu użytkownika.Sprawdzanie, czy funkcja OnPropertyChanged() jest wywoływana w wątku UI w aplikacji WPF MVVM
Używam wzorca MVVM, więc mój ViewModel nie wie praktycznie nic o widoku (UI), który przedstawia model użytkownikowi.
Say Mam następujące metody w moim ViewModel:
public void backgroundWorker_ReportProgress(object sender, ReportProgressArgs e)
{
this.Messages.Add(e.Message);
OnPropertyChanged("Messages");
}
Moim zdaniem Mam ListBox powiązany z właściwością Messages (a) z List<string>
ViewModel. OnPropertyChanged
spełnia rolę interfejsu INotifyPropertyChanged
, dzwoniąc pod numer PropertyChangedEventHandler
.
Muszę upewnić się, że OnPropertyChanged
jest wywoływana w wątku interfejsu użytkownika - jak to zrobić? Próbowałem następujące:
public Dispatcher Dispatcher { get; set; }
public MyViewModel()
{
this.Dispatcher = Dispatcher.CurrentDispatcher;
}
następnie dodając następujące metody OnPropertyChanged
:
if (this.Dispatcher != Dispatcher.CurrentDispatcher)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate
{
OnPropertyChanged(propertyName);
}));
return;
}
ale to nie działa. Jakieś pomysły?
to zrobił, z jednym niewielkim modyfikacji - zmieniłem Lista do ObservableCollction i działa jak czar. Dzięki! –
Jeśli możliwe jest obserwowanie "Wiadomości", nie ma potrzeby wywoływania dla niego funkcji OnPropertyChanged(). – Doug