Servus middenand,
ich habe eine Combobox die mit Checkboxen befüllt ist. Jede Checkbox hat den Namen eines Musikgenre. Nun soll man diese Musikgenres anklicken können, damit mein Programm weiss: Aha, Musiktitel dieses Genre sollen in Listboxen angezeigt werden. Standardmäßig sind alle angekreuzt.
Gebunden ist diese Combobox momentan per ItemsSource an eine Klasse
Das Ganze sieht so aus und ist Teil eines UserControls auf meinem MainWindow:
Die Klasse an sich:
Im ViewModel hab ich folgendes stehen:
und Folgendes soll in einer Listbox mit Radiostreams (welche intern auch als MP3 mit Metadaten gehandlet werden) nur diejenigen Radiostreams anzeigen, die zu den ausgewählten Genres gehören:
Wenn ich aber nun ein Genre "weggklicke" passiert rein gar nichts...
Wenn noch weitere Rückfragen sind, bitte melden, oder auch wenn das ganze Projekt benötigt wird...
Bini gespannt auf Eure Antworten
ich habe eine Combobox die mit Checkboxen befüllt ist. Jede Checkbox hat den Namen eines Musikgenre. Nun soll man diese Musikgenres anklicken können, damit mein Programm weiss: Aha, Musiktitel dieses Genre sollen in Listboxen angezeigt werden. Standardmäßig sind alle angekreuzt.
Gebunden ist diese Combobox momentan per ItemsSource an eine Klasse
Genres
im Model.Das Ganze sieht so aus und ist Teil eines UserControls auf meinem MainWindow:
XML-Quellcode
- <ComboBox Name="cmbGenre" IsEditable="False" ItemsSource="{Binding AnzuzeigendeGenres}">
- <ComboBox.ItemTemplate>
- <DataTemplate>
- <CheckBox Content="{Binding Genre, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsChecked="{Binding IstSelektiert, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
- </DataTemplate>
- </ComboBox.ItemTemplate>
- </ComboBox>
Die Klasse an sich:
VB.NET-Quellcode
- Option Strict On
- Imports System.ComponentModel
- Public Class Genres
- Public _IstSelektiert As Boolean
- Public _Genre As String
- Public Property IstSelektiert As Boolean
- Get
- Return _IstSelektiert
- End Get
- Set(value As Boolean)
- _IstSelektiert = value
- End Set
- End Property
- Public Property Genre As String
- Get
- Return _Genre
- End Get
- Set(value As String)
- _Genre = value
- End Set
- End Property
- Public Sub New(varIstSelektiert As Boolean, varGenre As String)
- _IstSelektiert = varIstSelektiert
- _Genre = varGenre
- End Sub
- End Class
Im ViewModel hab ich folgendes stehen:
VB.NET-Quellcode
- Public ReadOnly Property AnzuzeigendeGenres As ObservableCollection(Of Genres)
- Get
- Dim retlist = New List(Of Genres)
- For Each item In InhaltGesamt 'InhaltGesasmt ist eine ObservableCollection(Of <MP3Metadaten>)
- retlist.Add(New Genres(True, item.Genre))
- Next
- Return New ObservableCollection(Of Genres)(retlist.OrderBy(Function(o) o.Genre).GroupBy(Function(f) f.Genre).Select(Function(g) g.First()).ToList()) 'doppelte Einträge entfernen und alphabetisch sortieren
- End Get
- End Property
und Folgendes soll in einer Listbox mit Radiostreams (welche intern auch als MP3 mit Metadaten gehandlet werden) nur diejenigen Radiostreams anzeigen, die zu den ausgewählten Genres gehören:
VB.NET-Quellcode
- Public ReadOnly Property AnzuzeigendeRadiostreams As ObservableCollection(Of MP3FileInfo)
- Get
- Dim retList = New List(Of MP3FileInfo)
- For Each item In InhaltGesamt
- If item.Stream = True Then 'aussortieren, ob es sich um einen Radiostream handelt
- retList.Add(item)
- End If
- Next
- Dim filteredList As List(Of MP3FileInfo) = retList
- If Not String.IsNullOrEmpty(TextFilter) Then
- filteredList = retList.Where(Function(x) x.Interpret.ToLower.Contains(TextFilter)).ToList() 'Textfilter ist an eine Textbox gebunden, wenn man jetzt z.B. den Sendernamen eingibt (welcher in [tt].Interpret[/tt] hinterlegt ist) sollen die dem Namen entsprechenden Sender angezeigt werden --> funktioniert soweit...
- Dim AusgewählteGenres As New List(Of String) 'ab hier kann man das glaube ich besser machen mit Linq
- For Each item In AnzuzeigendeGenres
- If item.IstSelektiert = True Then
- AusgewählteGenres.Add(item.Genre)
- End If
- Next
- Dim Ablage As New List(Of MP3FileInfo)
- For i = 0 To filteredList.Count - 1
- If AusgewählteGenres.Contains(filteredList(i).Genre) Then
- Ablage.Add(filteredList(i))
- End If
- Next
- filteredList = Ablage 'bis hier
- End If
- Return New ObservableCollection(Of MP3FileInfo)(filteredList.OrderBy(Function(o) o.Interpret).GroupBy(Function(f) f.Interpret).Select(Function(g) g.First()).ToList())
- End Get
- End Property
Wenn ich aber nun ein Genre "weggklicke" passiert rein gar nichts...
Wenn noch weitere Rückfragen sind, bitte melden, oder auch wenn das ganze Projekt benötigt wird...
Bini gespannt auf Eure Antworten
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kafffee“ ()