From 8fec3171df1318fc372bd86edc3261b7c23ba5fc Mon Sep 17 00:00:00 2001 From: Enrico Ludwig Date: Sat, 7 Sep 2024 00:04:55 +0200 Subject: [PATCH] Started working on ReactiveUI implementation --- BetterRaid.csproj | 11 ++++++----- Program.cs | 4 +++- ViewModels/MainWindowViewModel.cs | 31 ++++++++++++++++++++++--------- ViewModels/ViewModelBase.cs | 3 ++- Views/MainWindow.axaml | 4 ++-- 5 files changed, 35 insertions(+), 18 deletions(-) diff --git a/BetterRaid.csproj b/BetterRaid.csproj index 1b87177..e0a2efe 100644 --- a/BetterRaid.csproj +++ b/BetterRaid.csproj @@ -19,12 +19,13 @@ - - - - + + + + + - + diff --git a/Program.cs b/Program.cs index 672a903..92cffa0 100644 --- a/Program.cs +++ b/Program.cs @@ -1,5 +1,6 @@ using Avalonia; using System; +using Avalonia.ReactiveUI; namespace BetterRaid; @@ -18,5 +19,6 @@ sealed class Program => AppBuilder.Configure() .UsePlatformDetect() .WithInterFont() - .LogToTrace(); + .LogToTrace() + .UseReactiveUI(); } diff --git a/ViewModels/MainWindowViewModel.cs b/ViewModels/MainWindowViewModel.cs index 6f61c35..854c628 100644 --- a/ViewModels/MainWindowViewModel.cs +++ b/ViewModels/MainWindowViewModel.cs @@ -9,6 +9,7 @@ using BetterRaid.Models; using BetterRaid.Services; using BetterRaid.Views; using Microsoft.Extensions.Logging; +using ReactiveUI; namespace BetterRaid.ViewModels; @@ -29,15 +30,17 @@ public class MainWindowViewModel : ViewModelBase public ObservableCollection Channels { get => _channels; - set => SetProperty(ref _channels, value); + set => this.RaiseAndSetIfChanged(ref _channels, value); } + + public ObservableCollection FilteredChannels => GetFilteredChannels(); public string? Filter { get => _filter; set { - SetProperty(ref _filter, value); + this.RaiseAndSetIfChanged(ref _filter, value); LoadChannelsFromDb(); } } @@ -47,7 +50,7 @@ public class MainWindowViewModel : ViewModelBase get => _db.OnlyOnline; set { - SetProperty(ref _onlyOnline, value); + this.RaiseAndSetIfChanged(ref _onlyOnline, value); LoadChannelsFromDb(); } } @@ -93,7 +96,7 @@ public class MainWindowViewModel : ViewModelBase private void OnTwitchLoginCallback() { - OnPropertyChanged(nameof(IsLoggedIn)); + this.RaisePropertyChanged(nameof(IsLoggedIn)); } private void LoadChannelsFromDb() @@ -112,10 +115,10 @@ public class MainWindowViewModel : ViewModelBase Channels.Clear(); var channels = _db.Database.Channels - .ToList() - .OrderByDescending(c => c.IsLive) - .Where(c => OnlyOnline && c.IsLive || !OnlyOnline) - .Where(c => string.IsNullOrWhiteSpace(Filter) || c.Name?.Contains(Filter, StringComparison.CurrentCultureIgnoreCase) == true) + //.ToList() + //.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) @@ -137,6 +140,16 @@ public class MainWindowViewModel : ViewModelBase private void OnUserLoginChanged(object? sender, EventArgs e) { - OnPropertyChanged(nameof(IsLoggedIn)); + this.RaisePropertyChanged(nameof(IsLoggedIn)); + } + + 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); } } diff --git a/ViewModels/ViewModelBase.cs b/ViewModels/ViewModelBase.cs index b67d0c1..24f16ba 100644 --- a/ViewModels/ViewModelBase.cs +++ b/ViewModels/ViewModelBase.cs @@ -1,8 +1,9 @@ using CommunityToolkit.Mvvm.ComponentModel; +using ReactiveUI; namespace BetterRaid.ViewModels; -public class ViewModelBase : ObservableObject +public class ViewModelBase : ReactiveObject { } diff --git a/Views/MainWindow.axaml b/Views/MainWindow.axaml index 2f4dca3..50e1050 100644 --- a/Views/MainWindow.axaml +++ b/Views/MainWindow.axaml @@ -115,7 +115,7 @@ IsScrollInertiaEnabled="True" /> - @@ -240,7 +240,7 @@ - + -->