Utworzono kolekcję opakowującą dla ObservableCollection, która subskrybuje każde zdarzenie PropertyChanged elementu i ponownie wyświetla je jako własne zdarzenie ItemPropertyChanged. Zrobiłem to za pomocą podobnej metody do tego, co opisałem: here. Czy istnieje lepszy sposób? Czy brakuje mi innej kolekcji .NET, która już ma takie zachowanie?Odsłuchanie zdarzenia PropertyChanged dowolnego elementu w ObservableCollection <INotifyPropertyChanged>
Odpowiedz
Był już post o tym na stackoverflow. Zapewnia także szybką implementację nowego typu kolekcji, który eksponuje zdarzenie, aby to działało.
patrz link: ObservableCollection that also monitors changes on the elements in collection
Zgadzam się, szukałem "lepszego" sposobu niż subskrybować każdy element dziecka w kolekcji. – chilltemp
jestem przy założeniu, że są wypalania tego zdarzenia w celu obliczenia agregatu. Mam inne rozwiązanie tego problemu. Rozważ użycie Update Controls with linq. Możesz deklaratywnie opisać swój agregat za pomocą linq, a kontrolki aktualizacji będą śledzić zależności w obrębie kolekcji. Ilekroć kolekcja ulegnie zmianie lub jakakolwiek z przywoływanych właściwości ulegnie zmianie, wówczas zmieni ona wartość zagregowaną.
Po prostu użyj System.ComponentModel.BindingList<T>
. Zdarzenie ListChanged
zostanie uruchomione, gdy dowolny element na liście uruchomi się pod numerem INotifyPropertyChanged
.
- 1. Odsłuchanie zdarzenia odtwarzania przeglądarki
- 2. <style> tag wewnątrz dowolnego elementu będzie nadal działać?
- 3. Jak dokonać subskrypcji zdarzenia PropertyChanged w moim ViewModelu?
- 4. Kiedy WPF subskrybuje zdarzenie PropertyChanged?
- 5. Najlepsza praktyka Observablecollection <Model> vs Observablecollection <ViewModel>
- 6. Dodawanie zdarzenia kliknięcia do elementu?
- 7. Klasa podstawowa implementuje INotifyPropertyChanged: typy pochodne mogą używać zdarzenia PropertyChanged?
- 8. Nie można zmienić obiektu ObservableCollection podczas zdarzenia CollectionChanged
- 9. Typ delegata ogólnego do obsługi dowolnego zdarzenia
- 10. IList <T> do ObservableCollection <T>
- 11. Jak wykryć zmianę rozmiaru dowolnego elementu w HTML5
- 12. Jak działa ObservableCollection <T> .Move (int, int)?
- 13. Asynchroniczna aktualizacja elementów ObservableCollection
- 14. Zmiany w ObservableCollection nie aktualizują ListView
- 15. Aktualizacja ItemsControl gdy pozycja w ObservableCollection jest aktualizowana
- 16. Usuwanie dowolnego elementu z kolejki priorytetowej
- 17. Obserwuj obiekt PropertyChanged na elementach w kolekcji
- 18. Czy istnieje sposób na odsłuchanie zdarzenia w kontekście fantomowym z kontekstu strony?
- 19. zdarzenie PropertyChanged zawsze zerowa
- 20. Testowanie ViewModel PropertyChanged Wydarzenia
- 21. Ustawialny selektor ObservableCollection nie jest uruchamiany po dodaniu elementu.
- 22. Zobacz wszystkie zdarzenia w domenie dla elementu
- 23. Zdarzenie OnExpanded dla dowolnego elementu w widoku drzewa
- 24. C# Regex pasuje do dowolnego elementu w nawiasach
- 25. Jak mogę wrzucony do ObservableCollection <object>
- 26. Zamów ObservableCollection <T> bez tworzenia nowej jeden
- 27. Wymowne załączanie/odłączanie/synchronizowanie powoduje uruchomienie dowolnego zdarzenia?
- 28. Lepsza obsługa zdarzeń PropertyChanged i PropertyChanging
- 29. Jak przesłać listę <T> do obiektu ObservableCollection <T> w wtf?
- 30. C# HashSet <T> wydajność wyszukiwania (w porównaniu do ObservableCollection <T>)?
Wygląda na to, że może to być dość drogie, gdy na przykład budujesz bardzo dużą kolekcję. Mam nadzieję, że jest lepsza opcja. – kbrimington
Nie ma takiego, który widziałem. – bporter
Jaki jest cel tworzenia własnego wydarzenia zamiast używania standardowych interfejsów INotifyPropertyChanged/ICollectionChanged? – Goblin