Searching for a solution to sort and / or filter ListBox
This commit is contained in:
parent
791cb531e2
commit
4806e62a00
@ -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
|
||||
|
@ -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<TwitchChannel> _channels = [];
|
||||
|
||||
private readonly ISynchronizaionService _synchronizationService;
|
||||
private readonly ILogger<MainWindowViewModel> _logger;
|
||||
private readonly IWebToolsService _webTools;
|
||||
@ -35,18 +32,24 @@ public class MainWindowViewModel : ViewModelBase
|
||||
set => SetProperty(ref _channels, value);
|
||||
}
|
||||
|
||||
public ObservableCollection<TwitchChannel> 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<TwitchChannel> 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<TwitchChannel>(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();
|
||||
|
Reference in New Issue
Block a user