Started working on ReactiveUI implementation

This commit is contained in:
Enrico Ludwig 2024-09-07 00:04:55 +02:00
parent 6373a47cf6
commit 8fec3171df
5 changed files with 35 additions and 18 deletions

View File

@ -19,12 +19,13 @@
<ItemGroup>
<PackageReference Include="AsyncImageLoader.Avalonia" Version="3.3.0" />
<PackageReference Include="Avalonia" Version="11.1.0" />
<PackageReference Include="Avalonia.Desktop" Version="11.1.0" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.1.0" />
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.1.0" />
<PackageReference Include="Avalonia" Version="11.1.3" />
<PackageReference Include="Avalonia.Desktop" Version="11.1.3" />
<PackageReference Include="Avalonia.ReactiveUI" Version="11.1.3" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.1.3" />
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.1.3" />
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.1.0" />
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.1.3" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />

View File

@ -1,5 +1,6 @@
using Avalonia;
using System;
using Avalonia.ReactiveUI;
namespace BetterRaid;
@ -18,5 +19,6 @@ sealed class Program
=> AppBuilder.Configure<App>()
.UsePlatformDetect()
.WithInterFont()
.LogToTrace();
.LogToTrace()
.UseReactiveUI();
}

View File

@ -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<TwitchChannel> Channels
{
get => _channels;
set => SetProperty(ref _channels, value);
set => this.RaiseAndSetIfChanged(ref _channels, value);
}
public ObservableCollection<TwitchChannel> 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<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);
}
}

View File

@ -1,8 +1,9 @@
using CommunityToolkit.Mvvm.ComponentModel;
using ReactiveUI;
namespace BetterRaid.ViewModels;
public class ViewModelBase : ObservableObject
public class ViewModelBase : ReactiveObject
{
}

View File

@ -115,7 +115,7 @@
IsScrollInertiaEnabled="True" />
</ScrollViewer.GestureRecognizers>
<ListBox Items="{Binding Channels, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
<!--<ListBox Items="{Binding FilteredChannels, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
SelectionMode="Single"
SelectionChanged="SelectingItemsControl_OnSelectionChanged">
@ -240,7 +240,7 @@
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ListBox>-->
</ScrollViewer>