Trong ứng dụng WPF mà tôi đang viết bằng mẫu MVVM, tôi có một quá trình nền để thực hiện điều đó, nhưng cần phải cập nhật trạng thái từ nó vào giao diện người dùng.Đảm bảo OnPropertyChanged() được gọi trên chuỗi giao diện người dùng trong ứng dụng MVVM WPF
Tôi đang sử dụng mẫu MVVM, vì vậy ViewModel của tôi hầu như không biết gì về giao diện (UI) đang trình bày mô hình cho người dùng.
Nói rằng tôi có phương pháp sau đây trong ViewModel của tôi:
public void backgroundWorker_ReportProgress(object sender, ReportProgressArgs e)
{
this.Messages.Add(e.Message);
OnPropertyChanged("Messages");
}
Theo quan điểm của tôi, tôi có một ListBox ràng buộc với Tin nhắn của tài sản (một List<string>
) của ViewModel. OnPropertyChanged
hoàn thành vai trò của giao diện INotifyPropertyChanged
bằng cách gọi số PropertyChangedEventHandler
.
Tôi cần đảm bảo rằng OnPropertyChanged
được gọi trên chuỗi giao diện người dùng - làm cách nào để thực hiện việc này? Tôi đã thử những điều sau đây:
public Dispatcher Dispatcher { get; set; }
public MyViewModel()
{
this.Dispatcher = Dispatcher.CurrentDispatcher;
}
Sau đó, thêm dòng sau vào phương pháp OnPropertyChanged
:
if (this.Dispatcher != Dispatcher.CurrentDispatcher)
{
this.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate
{
OnPropertyChanged(propertyName);
}));
return;
}
nhưng điều này đã không làm việc. Bất kỳ ý tưởng?
Điều đó đã làm nó, với một thay đổi nhỏ khác - tôi đã thay đổi Danh sách của tôi một ObservableCollction và nó hoạt động như một nét duyên dáng. Cảm ơn! –
Nếu 'Tin nhắn' có thể quan sát được thì không cần phải gọi OnPropertyChanged() cho nó. – Doug