[MVVM] Binding Problem mit zwei ListViews

  • WPF

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Counterbug.

    [MVVM] Binding Problem mit zwei ListViews

    Hallo zusammen,

    ich baue grade eine Anwendung auf Basis des MVVM Patters und bin auf folgendes Problem gestoßen:

    Ich habe eine View auf der zwei ListViews sind. Eine für Personen und eine für, sagen wir mal Aufträge.
    Die Personen-ListView hat ein ItemTemplate, in dem entsprechend auf die Eigenschaften des Personen-ViewModels zugegriffen wird. Die zweite ListView soll die Aufträge der Person anzeigen, welche in der Peronen-ListView ausgewählt wurde. Dieses hat ebenfalls ein ItemTemplate.

    Mein Problem ist jetzt, dass ich nach MVVM Pattern das SelectionChanged-Event, der Personen-ListView in dem ViewModel der Person behandeln müsste, oder? Wie kann ich aber von dort aus, die andere ListView mit Daten füttern?


    Hoffe das war verständlich. :)
    Grüße
    Hallo Daniel303.

    Was du wohl suchst, ist die SelectedItem-Eigenschaft der Listbox. An die kannst du nämlich deine zweite Listbox mit den Aufträgen binden.

    Ich persönlich würde Person und dessen Aufträge in eine Klasse packen, eine Person hat schließlich mehrere Aufträge.
    Dann kannst du die 1. Listbox an eine ObservableCollection(of Person) binden (angenommen, wir haben die Klasse Person) und die 2. Listbox an die Aufträge vom SelectedItem der 1. binden.

    Das könnte zB. so aussehen:

    VB.NET-Quellcode

    1. Public class Person : Inherits NotifyPropC
    2. Public Sub New(ByVal name as String, ByVal auftraege() as String)
    3. _name = name
    4. _auftraege = auftraege
    5. End Sub
    6. Private _name as String
    7. Public Property Name as String
    8. Get
    9. Return _name
    10. End Get
    11. Set(ByVal value As String)
    12. _name = value
    13. NotifyPropertyChanged("Name")
    14. End Set
    15. End Property
    16. Private _auftraege() as String
    17. Public Property Auftraege() as String
    18. Get
    19. Return _auftraege
    20. End Get
    21. Set(ByVal value() As String)
    22. _auftraege = auftraege
    23. NotifyPropertyChanged("Auftraeege")
    24. End Set
    25. End Property
    26. End Class
    27. Xaml:
    28. <ListBox ItemsSource="{Binding Path=Persons}" DisplayMemberPath="Name" x:Name="lbPersons" />
    29. <ListBox ItemsSource="{Binding ElementName=lbPersons, Path=SelectedItem.Auftraege}"/>



    Ist natürlich nur die Anwendung dessen, was EDR verlinkt hat.