2009-06-08 13 views
11

Próbuję zrozumieć podstawowe podejście do projektowania MVVM przy użyciu ItemsControl przez związanie go poprzez DataTemplates do ObservableCollections na ViewModel.Czy mój ViewModel powinien mieć ObservableCollection widoków lub ViewModels?

Widziałem przykłady, które wiążą się z ObservableCollections ciągów, Wyświetleń i ViewModels.

Wiązanie strun wydaje się być tylko dla dema, to wiązanie „ViewModels które zawierają zbiory poglądów, które zawierają zbiory ViewModels”, że moc WPF wydaje się naprawdę wyjdzie.

Dla tych, którzy są biegli w schemacie MVVM, jakie jest Twoje standardowe podejście do wiązania ItemsControl, ListView, ListBox do kolekcji w ViewModel? szukam porad z doświadczenia tak:

  • zawsze użyć ObservableCollection < ...> i nigdy lista < ...> bo ...
  • coś lepszego niż ItemsControl wyświetlić zbiór jest ...
  • w celu uzyskania filtrowanie do pracy w ViewModel zamiast kodu źródłowego, użytkowania ...
  • użytku zbiory poglądów, gdy ... i zbiory ViewModels, gdy ...
  • 90% czasu, kiedy tworzę ItemsControl i wiążę go z O bservableCollection widoków, które mają własne ViewModels ...

Odpowiedz

10

użyłbym ObservableCollection z ViewModels z następujących powodów:

  • ObservableCollection już dostępne do sygnalizowania zdarzeń, gdy został zmodyfikowany (na przykład, gdy elementy są dodawane/usuwane z kolekcji).
  • Jesteśmy na warstwie ViewModel, więc zapewnia czystszą separację, aby ViewModel zawierał kolekcję ViewModels, a nie Widoki
  • Jeśli konieczne jest zmodyfikowanie lub pobranie danych z pozycji w kolekcji, można łatwiej zmodyfikuj/uzyskaj dostęp do tych danych, jeśli elementy to ViewModels (jeśli są widokami, często będziesz przesyłać Dane Kontekstu widoku lub uzyskiwać dostęp do jego elementów interfejsu użytkownika).
+0

pomocne, dzięki –

+0

+1, jest to zdecydowanie droga. twój viewmodel ma kolekcje viewmodels, a kolekcja zasobów twojego widoku ma datatyplates dla każdej z tych viewmodeli. –

1

Lubię używać ObservableCollection z ViewModels. Widok wiążący się z kolekcją może definiować DataTemplate, który nadaje ViewModel swój wygląd. Prowadzi to do mniejszego sprzężenia między komponentami.

+0

Jeśli masz ObservableCollection ViewModels (zamiast widoków), jaka jest różnica między posiadaniem XAML w DataTemplate i tym, że XAML jest plikiem .xaml widoku? –

1

Mam to samo pytanie, ale zastąp "widok" "modelem". :)

Mam MODEL z kolekcją innych modeli. Chcę, aby mój viewmodel miał możliwą do zaobserwowania kolekcję innych viewmodeli, ale gdy już to zrobię, połączenie między zawartością kolekcji modelu zostanie utracone. Czy muszę teraz rozpocząć okablowanie wszystkich zdarzeń z obserwowalnej kolekcji viewmodels z powrotem do kolekcji modeli?

+1

Tak, wydarzenie to najlepszy sposób na zrobienie tego. Rozważ użycie słabego wzorca zdarzeń dla bezpieczeństwa. – Gusdor

Powiązane problemy