2012-03-02 14 views
13

Poprosiłem to pytanie na forum MSDN oraz ... http://social.msdn.microsoft.com/Forums/en/wpf/thread/4493988a-9bd8-48fe-aff0-348502136a80dlaczego nie BindingList w WPF

muszę wiedzieć, że dlaczego Microsoft sugeruje, że nie jest BindingList prawidłowo obsługiwane w WPF ...

Co to jest, że nie działa z BindingList w WPF? Uważam, że jest całkiem użyteczny. Do tej pory osobiście nie znalazłem ani wolniej, ani więcej pamięci.

Plus WPF ItemsControls, ItemsTemplates, Styles, Hierarchies praca wielki z BindingList zbyt. Są one równie obserwowalne.

Będąc hardcore WPF developer siebie i ObservableCollection wentylator, moja wiara jest uzyskiwanie wstrząśnięty przez już-nie-done-to BindingList ....

Dlaczego warto korzystać ObservableCollection nad BindingList? (utrzymanie na bok INotifyPropertyChanged których oba mają wdrożyć zmiany własności pozycja)

+0

Możliwy duplikat http://stackoverflow.com/questions/4284663/difference-between-observablecollection-and-bindinglist –

+2

@Leom, że nić nie robi też odpowiedzieć na pytanie jak w tym, co jest nie tak z 'BindingList'? –

+2

ObservableCollection powiadamia już o dodaniu lub usunięciu przedmiotu. Nie musisz implementować INotifyPropertyChanged. – dcarneiro

Odpowiedz

16

To może być interesujące:

http://www.themissingdocs.net/wordpress/?p=465

najważniejsze ustępy:

Ale realizacja nie skaluje , jest powolny, działa strasznie z większymi listami. Jeśli twój typ elementu obsługuje INotifyPropertyChanged, za każdym razem, gdy jeden z tych elementów podnosi właściwości, zmieniono zdarzenie, a cała lista przechodzi do opracowania indeksu na liście przedmiotu, który podniósł wydarzenie! Byłem w szoku, kiedy po raz pierwszy zdałem sobie z tego sprawę. Zobaczysz, że BindingList jest po prostu cienkim opakowaniem w kolekcji, więc nie ma żadnych metadanych powiązanych z każdym wpisem, całe wiązanie zdarzenia PropertyChanged elementu jest kierowane do pojedynczego programu obsługi, a wszystko, co dostaje, to źródło i nazwa Zmieniona właściwość, więc nie ma możliwości włączenia parametru NewIndex do ListChangedEventArgs bez wykonywania wyszukiwania. (Domyślnie to wyszukiwanie wykorzystuje nawet domyślny komparator obiektów, więc jeśli masz dwa różne, ale czasami równe obiekty na liście, ciesz się wynikami ...)

Inna notatka boczna - AddNew, inna funkcja, którą ma BindingList Kolekcja nie - również nie skaluje. Musi użyć IndexOf, aby dowiedzieć się, gdzie na liście znajduje się nowo dodany element, na wypadek, gdyby musiał anulować dodawanie, ponieważ obsługuje automatyczne sortowanie w typach pochodnych. (BindingList nie obsługuje automatycznego sortowania się ...)

+0

Awesome! Thx a tonn! To właśnie chciałem wiedzieć ... Powiadomienia o zmianie pozycji kaskady!Moja wiara zostaje odzyskana. :-) –

+12

Tytuł połączonego wpisu to "BindingList does not Scale". Interesujące, ale uważnie przeczytane - tylko w sekcjach komentarzy odkrywasz, że aplikacja autora jest niezwykła, ponieważ chce pokazać bardzo dużą liczbę aktualizacji w czasie rzeczywistym na swoim interfejsie użytkownika. Prawdopodobnie nie jest to problem w bardziej typowym scenariuszu interfejsu użytkownika. –

+1

Więc można bezpiecznie powiedzieć, że lista Binding działa dobrze w 99% aplikacji wpf – MegaMind

Powiązane problemy