Jak w WPF (MVVM) dodać kontrolki w zależności od ilości elementów w kolekcji

0

Chciałbym dynamicznie, w zależności od ilości elementów w kolekcji która bedzie bindowana z ViewModelu dodać kontrolki na widok.
W ViewModel mam:
ObservableCollection<Element> gdzie Element to klasa posiadająca właściwosci Nazwa, Ilość, Cena
Teraz w zależności od ilości elementów w tym ObserwableCollection chciałbym wrzucic na widok kontrolki tak zebym mógł tą klekcję pokazac w widoku, tak że obiekty typu Element w osobnej lini, z możliwością scrollowania okna. Chciałbym uzyskać taki widok. Czy mogłby ktoś pomóc?

screenshot-20210702231611.png

2

Zacznij od użycia ItemsControl, któremu poprzez Binding podepniesz źródło (ItemsSource).
Źródłem możesz już potem dowolnie zarządzać dodając lub usuwając elementy.

Ważne:
Najlepiej by kolekcja jaką pod to podepniesz była ObservableCollection, natomiast binding ustaw na TwoWay.

Przykłady kodu możesz znaleźć w:

  • dokumentacji
  • SO - pierwsza odpowiedź, chociaż nie zaakceptowana, to według mnie najlepsza by zacząć.
  • MSDN forum - aczkolwiek tutaj dużo odpowiedzi bazuje na podejściu code behind, którego rzecz jasna nie polecam.

Aczkolwiek zastanawiam się, czy w ogóle tędy droga. Robiłem ostatnio u siebie coś podobnego:

ListViewExample.gif

W bazie trzymam listę itemów (książek), które wyświetlane są na liście (ListView). Lista jest w pełni dynamiczna i można ją dowolnie ostylować.
Cały widok takiej listy wygląda tak:

        <ListView Margin="10" Grid.Column="0" Grid.Row="0"
            Background="Transparent"
            Foreground="Wheat"
            ItemsSource="{Binding BooksList}"
            ItemTemplate="{StaticResource BooksListViewTemplate}"
            SelectionMode="Single"
            MinHeight="100"
            VerticalAlignment="Stretch"
            BorderThickness="1"
            SelectedIndex="{Binding SelectedBookIndex}"
        />

a kluczowym punktem jest tutaj ItemTemplate, który decyduje o tym, jak wygląda każdy element na liście.
Czyli tam, gdzie ja mam jedynie napis, Ty możesz mieć przyciski i cokolwiek sobie zaprojektowałeś.

Podrzucam też listę pull requestów, które to implementują.

1 użytkowników online, w tym zalogowanych: 0, gości: 1