From 4806e62a000c96de26bf6ad5af39b19d0d01a8b5 Mon Sep 17 00:00:00 2001 From: Enrico Ludwig Date: Fri, 6 Sep 2024 23:39:05 +0200 Subject: [PATCH] Searching for a solution to sort and / or filter ListBox --- BetterRaid.generated.sln | 10 +++---- ViewModels/MainWindowViewModel.cs | 43 ++++++++++--------------------- 2 files changed, 19 insertions(+), 34 deletions(-) diff --git a/BetterRaid.generated.sln b/BetterRaid.generated.sln index 407d645..2ae188f 100644 --- a/BetterRaid.generated.sln +++ b/BetterRaid.generated.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.002.0 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BetterRaid", "BetterRaid.csproj", "{C23C5237-3D18-424A-ACF2-62215BE5D557}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BetterRaid", "BetterRaid.csproj", "{5E0DA55A-6B6B-4906-ACB9-401AB203D537}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -11,10 +11,10 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {C23C5237-3D18-424A-ACF2-62215BE5D557}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C23C5237-3D18-424A-ACF2-62215BE5D557}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C23C5237-3D18-424A-ACF2-62215BE5D557}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C23C5237-3D18-424A-ACF2-62215BE5D557}.Release|Any CPU.Build.0 = Release|Any CPU + {5E0DA55A-6B6B-4906-ACB9-401AB203D537}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5E0DA55A-6B6B-4906-ACB9-401AB203D537}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5E0DA55A-6B6B-4906-ACB9-401AB203D537}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5E0DA55A-6B6B-4906-ACB9-401AB203D537}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/ViewModels/MainWindowViewModel.cs b/ViewModels/MainWindowViewModel.cs index 351727c..6f61c35 100644 --- a/ViewModels/MainWindowViewModel.cs +++ b/ViewModels/MainWindowViewModel.cs @@ -1,6 +1,5 @@ using System; using System.Collections.ObjectModel; -using System.ComponentModel; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -10,14 +9,12 @@ using BetterRaid.Models; using BetterRaid.Services; using BetterRaid.Views; using Microsoft.Extensions.Logging; -using TwitchLib.PubSub.Events; namespace BetterRaid.ViewModels; public class MainWindowViewModel : ViewModelBase { private ObservableCollection _channels = []; - private readonly ISynchronizaionService _synchronizationService; private readonly ILogger _logger; private readonly IWebToolsService _webTools; @@ -35,18 +32,24 @@ public class MainWindowViewModel : ViewModelBase set => SetProperty(ref _channels, value); } - public ObservableCollection FilteredChannels => GetFilteredChannels(); - public string? Filter { get => _filter; - set => SetProperty(ref _filter, value); + set + { + SetProperty(ref _filter, value); + LoadChannelsFromDb(); + } } - + public bool OnlyOnline { get => _db.OnlyOnline; - set => SetProperty(ref _onlyOnline, value); + set + { + SetProperty(ref _onlyOnline, value); + LoadChannelsFromDb(); + } } public bool IsLoggedIn => _twitch.UserChannel != null; @@ -110,7 +113,9 @@ public class MainWindowViewModel : ViewModelBase var channels = _db.Database.Channels .ToList() - .OrderBy(c => c.IsLive) + .OrderByDescending(c => c.IsLive) + .Where(c => OnlyOnline && c.IsLive || !OnlyOnline) + .Where(c => string.IsNullOrWhiteSpace(Filter) || c.Name?.Contains(Filter, StringComparison.CurrentCultureIgnoreCase) == true) .ToList(); foreach (var channel in channels) @@ -125,26 +130,6 @@ public class MainWindowViewModel : ViewModelBase } } - private ObservableCollection GetFilteredChannels() - { - var filteredChannels = Channels - .Where(channel => OnlyOnline == false || channel.IsLive) - .Where(channel => string.IsNullOrWhiteSpace(Filter) || channel.Name?.Contains(Filter, StringComparison.OrdinalIgnoreCase) == true) - .ToList(); - - return new ObservableCollection(filteredChannels); - } - - protected override void OnPropertyChanged(PropertyChangedEventArgs e) - { - base.OnPropertyChanged(e); - - if (e.PropertyName == nameof(Filter)) - { - OnPropertyChanged(nameof(FilteredChannels)); - } - } - private void OnTwitchChannelUpdated(object? sender, TwitchChannel channel) { LoadChannelsFromDb();