2009-11-25 22 views
5

Wygląda na to, że inni mieli wariacje na temat tego pytania, ale z tego, co mogę powiedzieć, nie było adresowane do osób korzystających z kolekcji w modelu z pojedynczym widokiem.MVVM zaznaczanie elementu widoku drzewa programowo

Mam maszynę wirtualną zawierającą obserwowalną kolekcję obiektów, a nie maszynę wirtualną dla każdego obiektu. Dlatego nie sądzę, mogę użyć bool SelectedItem, który jest często omawiany, ponieważ nie sądzę, mogę powiązać z właściwością obiektów kolekcji ... po prostu właściwości na VM.

Tak więc mam wszystko napisane całkiem dobrze, bez kodu źródłowego i minimalnego sprzężenia, ale kiedy do kolekcji zostanie dodany nowy element, który jest powiązany z treeView, muszę wybrać ten element.

Pomysły?

Dzięki!

Odpowiedz

4

Myśląc o tym. Naprawdę powinieneś zbudować wrapper dla każdego elementu widoku drzewa, który ma Bool IsSelected na nim, oraz Boo IsExpanded, dzięki czemu o wiele łatwiej jest wyświetlać dane. Możesz nawet dodać je do swojej klasy i używać ich tam.

+0

Może tak. Ja jednak wybrałem środkową drogę. Poszedłem dalej i zaimplementowałem INotifyPropertyChanged na każdym typie obiektów, który ObservableCollection VM trzyma i klepie IsSelected i IsExpanded na nich. Wadą jest to, że moje obiekty mają teraz w sobie gówno (czy to nawet źle?). Dobrą stroną jest to, że nie musiałem tworzyć dodatkowej warstwy maszyn wirtualnych, które zapewniły mi nic poza miejscem przechowywania obiektu i tych dwóch właściwości. – Bob

+0

Jeśli to wszystko, czego potrzebujesz, możesz równie dobrze zrobić to w ten sposób. – Erin

4

Josh Smith ma artykuł na temat CodeProject, w którym sugeruje stworzenie obiektu ViewModel do reprezentowania każdego węzła drzewa TreeView, a następnie autodires je w razie potrzeby.

http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

+0

tak, to dobry artykuł. Nie unikaj mnie, ale myślę, że może to być przesada, gdy wszystko, co naprawdę musisz zrobić, to podłączyć kilka interakcji UI (rozwiń, wybierz). :) – Bob