Aktualnie używam obserwowalnej kolekcji do przechowywania moich obiektów danych dla ListView. Dodawanie nowych obiektów do kolekcji działa dobrze, a lista wyświetla się poprawnie. Jednak gdy próbuję zmienić jedną z właściwości obiektu w kolekcji, listView nie zaktualizuje się poprawnie. Na przykład mam obserwowalną kolekcję DataCollection. PróbujęListView nie jest poprawnie aktualizowany za pomocą ObservableCollection
Dokonuję tej zmiany przed długą operacją z powodu naciśnięcia przycisku. ListView nie odzwierciedli zmiany. Więc dodaję myListView.Items.Refresh()
;. To działa, jednak listView nie zostanie odświeżony, dopóki metoda button_click nie zostanie zakończona, co nie jest do tego dobre. Na przykład:
button1_Click(...)
{
_DataCollections.ElementAt(count).Status = "Active";
myListView.Items.Refresh();
ExecuteLongOperation();
_DataCollections.ElementAt(count).Status = "Finished";
myListView.Items.Refresh();
}
Stan nigdy nie będzie goto „Active”, to pójdzie prosto do „Zakończone” po zakończeniu metody. Próbowałem też za pomocą dyspozytora tak:
button1_Click(...)
{
this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background,
(NoArgDelegate)delegate { _DataCollection.ElementAt(count).Status = "Active"; myListView.Items.Refresh(); });
ExecuteLongOperation();
this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background,
(NoArgDelegate)delegate { _DataCollection.ElementAt(count).Status = "Finished"; myListView.Items.Refresh(); });
}
jednak, że nie wydaje się działać prawidłowo albo. Wszelkie wskazówki i pomysły będą mile widziane.
Potrzebuję dużo czasu, aby znaleźć poprawną implementację metody Affecting_PropertyChanged. Potrzebny jest tylko jeden wiersz: 'MyBase.OnCollectionChanged (New NotifyCollectionChangedEventArgs (NotifyCollectionChangedAction.Reset))' i polecam nadpisanie InsertItem i RemoveItem z ObservableCollection, ponieważ SetItem didn Działają dla mnie. –
@Felix, tak, było w tym coś więcej. Wdrożenie klasy przekracza 800 linii. Powiedziałem, że napisałem częściowy kod, głównie po to, aby dać ogólny pomysł. –
Napisałem to dla innych osób, które znajdują ten wpis i nie wiedzą, jak zaimplementować te linie kodu. To nie była korekta, tylko przedłużenie, żeby to działało. :), ale dlaczego twoja klasa ma długość 800 linii? Naprawdę chciałbym zobaczyć twoją pełną klasę implementacji. –