Mam (zewnętrzny) model eksponujący listę, która stale się zmienia (powiedzmy co dwie sekundy). ViewModel wie, że rejestracja listy dla zdarzeń PropertyChange. Ten ViewModel zapewnia również ObservableCollection dla interfejsu użytkownika dla powiązania danych.Najlepsza praktyka synchronizowania zmieniającej się listy modelu z obserwowalną listą ViewModel?
+-----------------------------------------------+
| View|
| +-----------+ |
| |Listbox | |
| +-----------+ |
+-----/\----------------------------------------+
||
||DataBinding
||
||
+-----||----------------------------------------+
| || ViewModel|
| +--------------------+ +-------------+|
| |ObservableCollection|<--------|ChangeHandler||
| +--------------------+ / +-------------+|
| / ^ |
+-------------------------/------------|--------+
/ |
/ |
Synchronizing Lists | PropertyChanged
|
|
+--------------------------------------|--------+
| +-----+ Model|
| |IList| |
| +-----+ |
| |
+-----------------------------------------------+
Zasadniczo działa to dobrze, oprócz aktualizacji przeprowadzanych stale. Przy każdej aktualizacji użytkownik traci swój wybór, tzn. Wszystkie pozycje zostaną odznaczone przy każdej aktualizacji. Nic dziwnego, ponieważ ListBox WPF "widzi", że została przypisana nowa lista.
Tak, sprawa musi być tak, że robimy nie przypisać nowy ObservableCollection, ale scalić zawartość bieżącego ObservableCollection z zaktualizowanym Model.List
teraz moje pytania
- Synchronizowanie list - Czy istnieją dobre praktyki (lub schematy) dotyczące tego, jak wykonać scalenie? (Skopiuj nowe elementy do ObservableCollection, Usuwanie brakujących elementów, aktualizacja zmienionych elementów)
- Wybrany element - W jaki sposób mogę zapewnić, że ListBox zachowuje aktualnie wybrany element (oprócz przypadku, w którym element został usunięty)
+1 Ładny schemat =] –
Dzięki. Jestem bardzo wizualną osobą i potrzebuję zdjęć. Szybko zrobić z Jave5 – Seven