Hallo zusammen,
ich versuche mich gerade an WPF und MVVM und habe mich dafür ein kleines Projekt gebastelt. Dort habe ich ein Treeview, welches ich gerne als eine Art Navigation verwenden möchte. Maximal zwei Ebenen sollen es werden.
Allerdings wird bei mir nur die erste Ebene angezeigt und ich habe keine Möglichkeit diese auszuklappen.
Hier der Code zu meinem Treeview:
Spoiler anzeigen
Mein ViewModel sieht entsprechend so aus:
Spoiler anzeigen
Und die beiden Models:
Spoiler anzeigen
Spoiler anzeigen
Habe natürlich auch schon Google bemüht und habe das sowie dies gefunden. Ich denke, dass ich es genauso habe, nur mit dem Unterschied, dass ich zwei Ebenen möchte und keine drei. Bin über jede Hilfe dankbar!
Vielen Dank
ich versuche mich gerade an WPF und MVVM und habe mich dafür ein kleines Projekt gebastelt. Dort habe ich ein Treeview, welches ich gerne als eine Art Navigation verwenden möchte. Maximal zwei Ebenen sollen es werden.
Allerdings wird bei mir nur die erste Ebene angezeigt und ich habe keine Möglichkeit diese auszuklappen.
Hier der Code zu meinem Treeview:
XML-Quellcode
- <TreeView Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding Path=Restaurants}">
- <TreeView.ItemTemplate>
- <HierarchicalDataTemplate DataType="{x:Type models:Restaurant}">
- <Label Content="{Binding Path=Name}" />
- <HierarchicalDataTemplate.ItemTemplate>
- <DataTemplate DataType="{x:Type models:Kategorie}">
- <Label Content="{Binding Path=Bezeichnung}" />
- </DataTemplate>
- </HierarchicalDataTemplate.ItemTemplate>
- </HierarchicalDataTemplate>
- </TreeView.ItemTemplate>
- </TreeView>
Mein ViewModel sieht entsprechend so aus:
VB.NET-Quellcode
- Private _Restaurants As New ObservableCollection(Of Restaurant)
- Public Property Restaurants As ObservableCollection(Of Restaurant)
- Get
- Return _Restaurants
- End Get
- Set(value As ObservableCollection(Of Restaurant))
- _Restaurants = value
- End Set
- End Property
- Sub New()
- Restaurants = New ObservableCollection(Of Restaurant)
- Restaurants.Add(New Models.Restaurant With {.Name = "Test 1", .Kategorien = New ObservableCollection(Of Kategorie) From {New Kategorie With {.Bezeichnung = "Kat"}}})
- End Sub
Und die beiden Models:
VB.NET-Quellcode
- Public Class Restaurant
- Inherits Modelbase
- Private _kategorien As New ObservableCollection(Of Kategorie)
- Private _ort As String
- Private _plz As Integer
- Private _straßeHausNr As String
- Private _beschreibung As String
- Private _name As String
- Private _iD As Integer
- Property ID As Integer
- Get
- Return _iD
- End Get
- Set(ByVal Value As Integer)
- If (_iD.Equals(Value)) Then Return
- _iD = Value
- NotifyPropertyChanged(NameOf(ID))
- End Set
- End Property
- Property Name As String
- Get
- Return _name
- End Get
- Set(ByVal Value As String)
- If (_name = Value) Then Return
- _name = Value
- NotifyPropertyChanged(NameOf(Name))
- End Set
- End Property
- Property Beschreibung As String
- Get
- Return _beschreibung
- End Get
- Set(ByVal Value As String)
- If (_beschreibung = Value) Then Return
- _beschreibung = Value
- NotifyPropertyChanged(NameOf(Beschreibung))
- End Set
- End Property
- Property StraßeHausNr As String
- Get
- Return _straßeHausNr
- End Get
- Set(ByVal Value As String)
- If (_straßeHausNr = Value) Then Return
- _straßeHausNr = Value
- NotifyPropertyChanged(NameOf(StraßeHausNr))
- End Set
- End Property
- Property Plz As Integer
- Get
- Return _plz
- End Get
- Set(ByVal Value As Integer)
- If (_plz.Equals(Value)) Then Return
- _plz = Value
- NotifyPropertyChanged(NameOf(Plz))
- End Set
- End Property
- Property Ort As String
- Get
- Return _ort
- End Get
- Set(ByVal Value As String)
- If (_ort = Value) Then Return
- _ort = Value
- NotifyPropertyChanged(NameOf(Ort))
- End Set
- End Property
- Property Kategorien As ObservableCollection(Of Kategorie)
- Get
- Return _kategorien
- End Get
- Set(value As ObservableCollection(Of Kategorie))
- If (_kategorien.Equals(value)) Then Return
- _kategorien = value
- NotifyPropertyChanged(NameOf(Kategorien))
- End Set
- End Property
- Public Overrides Function ToString() As String
- Return Me.Name
- End Function
- End Class
VB.NET-Quellcode
- Public Class Kategorie
- Inherits Modelbase
- Private _speisen As ObservableCollection(Of Speise)
- Private _beschreibung As String
- Private _bezeichnung As String
- Private _iD As Integer
- Property ID As Integer
- Get
- Return _iD
- End Get
- Set(ByVal Value As Integer)
- If (_iD.Equals(Value)) Then Return
- _iD = Value
- NotifyPropertyChanged(NameOf(ID))
- End Set
- End Property
- Property Bezeichnung As String
- Get
- Return _bezeichnung
- End Get
- Set(ByVal Value As String)
- If (_bezeichnung = Value) Then Return
- _bezeichnung = Value
- NotifyPropertyChanged(NameOf(Bezeichnung))
- End Set
- End Property
- Property Beschreibung As String
- Get
- Return _beschreibung
- End Get
- Set(ByVal Value As String)
- If (_beschreibung = Value) Then Return
- _beschreibung = Value
- NotifyPropertyChanged(NameOf(Beschreibung))
- End Set
- End Property
- Property Speisen As ObservableCollection(Of Speise)
- Get
- Return _speisen
- End Get
- Set(value As ObservableCollection(Of Speise))
- If (_speisen.Equals(value)) Then Return
- _speisen = value
- NotifyPropertyChanged(NameOf(Speisen))
- End Set
- End Property
- Public Overrides Function ToString() As String
- Return Me.Bezeichnung
- End Function
- End Class
Habe natürlich auch schon Google bemüht und habe das sowie dies gefunden. Ich denke, dass ich es genauso habe, nur mit dem Unterschied, dass ich zwei Ebenen möchte und keine drei. Bin über jede Hilfe dankbar!
Vielen Dank