Started working on ReactiveUI implementation
This commit is contained in:
parent
6373a47cf6
commit
8fec3171df
@ -19,12 +19,13 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="AsyncImageLoader.Avalonia" Version="3.3.0" />
|
<PackageReference Include="AsyncImageLoader.Avalonia" Version="3.3.0" />
|
||||||
<PackageReference Include="Avalonia" Version="11.1.0" />
|
<PackageReference Include="Avalonia" Version="11.1.3" />
|
||||||
<PackageReference Include="Avalonia.Desktop" Version="11.1.0" />
|
<PackageReference Include="Avalonia.Desktop" Version="11.1.3" />
|
||||||
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.1.0" />
|
<PackageReference Include="Avalonia.ReactiveUI" Version="11.1.3" />
|
||||||
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.1.0" />
|
<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.-->
|
<!--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="CommunityToolkit.Mvvm" Version="8.2.1" />
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using Avalonia;
|
using Avalonia;
|
||||||
using System;
|
using System;
|
||||||
|
using Avalonia.ReactiveUI;
|
||||||
|
|
||||||
namespace BetterRaid;
|
namespace BetterRaid;
|
||||||
|
|
||||||
@ -18,5 +19,6 @@ sealed class Program
|
|||||||
=> AppBuilder.Configure<App>()
|
=> AppBuilder.Configure<App>()
|
||||||
.UsePlatformDetect()
|
.UsePlatformDetect()
|
||||||
.WithInterFont()
|
.WithInterFont()
|
||||||
.LogToTrace();
|
.LogToTrace()
|
||||||
|
.UseReactiveUI();
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ using BetterRaid.Models;
|
|||||||
using BetterRaid.Services;
|
using BetterRaid.Services;
|
||||||
using BetterRaid.Views;
|
using BetterRaid.Views;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using ReactiveUI;
|
||||||
|
|
||||||
namespace BetterRaid.ViewModels;
|
namespace BetterRaid.ViewModels;
|
||||||
|
|
||||||
@ -29,15 +30,17 @@ public class MainWindowViewModel : ViewModelBase
|
|||||||
public ObservableCollection<TwitchChannel> Channels
|
public ObservableCollection<TwitchChannel> Channels
|
||||||
{
|
{
|
||||||
get => _channels;
|
get => _channels;
|
||||||
set => SetProperty(ref _channels, value);
|
set => this.RaiseAndSetIfChanged(ref _channels, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ObservableCollection<TwitchChannel> FilteredChannels => GetFilteredChannels();
|
||||||
|
|
||||||
public string? Filter
|
public string? Filter
|
||||||
{
|
{
|
||||||
get => _filter;
|
get => _filter;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
SetProperty(ref _filter, value);
|
this.RaiseAndSetIfChanged(ref _filter, value);
|
||||||
LoadChannelsFromDb();
|
LoadChannelsFromDb();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -47,7 +50,7 @@ public class MainWindowViewModel : ViewModelBase
|
|||||||
get => _db.OnlyOnline;
|
get => _db.OnlyOnline;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
SetProperty(ref _onlyOnline, value);
|
this.RaiseAndSetIfChanged(ref _onlyOnline, value);
|
||||||
LoadChannelsFromDb();
|
LoadChannelsFromDb();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -93,7 +96,7 @@ public class MainWindowViewModel : ViewModelBase
|
|||||||
|
|
||||||
private void OnTwitchLoginCallback()
|
private void OnTwitchLoginCallback()
|
||||||
{
|
{
|
||||||
OnPropertyChanged(nameof(IsLoggedIn));
|
this.RaisePropertyChanged(nameof(IsLoggedIn));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LoadChannelsFromDb()
|
private void LoadChannelsFromDb()
|
||||||
@ -112,10 +115,10 @@ public class MainWindowViewModel : ViewModelBase
|
|||||||
Channels.Clear();
|
Channels.Clear();
|
||||||
|
|
||||||
var channels = _db.Database.Channels
|
var channels = _db.Database.Channels
|
||||||
.ToList()
|
//.ToList()
|
||||||
.OrderByDescending(c => c.IsLive)
|
//.OrderByDescending(c => c.IsLive)
|
||||||
.Where(c => OnlyOnline && c.IsLive || !OnlyOnline)
|
//.Where(c => OnlyOnline && c.IsLive || !OnlyOnline)
|
||||||
.Where(c => string.IsNullOrWhiteSpace(Filter) || c.Name?.Contains(Filter, StringComparison.CurrentCultureIgnoreCase) == true)
|
//.Where(c => string.IsNullOrWhiteSpace(Filter) || c.Name?.Contains(Filter, StringComparison.CurrentCultureIgnoreCase) == true)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
foreach (var channel in channels)
|
foreach (var channel in channels)
|
||||||
@ -137,6 +140,16 @@ public class MainWindowViewModel : ViewModelBase
|
|||||||
|
|
||||||
private void OnUserLoginChanged(object? sender, EventArgs e)
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
|
using ReactiveUI;
|
||||||
|
|
||||||
namespace BetterRaid.ViewModels;
|
namespace BetterRaid.ViewModels;
|
||||||
|
|
||||||
public class ViewModelBase : ObservableObject
|
public class ViewModelBase : ReactiveObject
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -115,7 +115,7 @@
|
|||||||
IsScrollInertiaEnabled="True" />
|
IsScrollInertiaEnabled="True" />
|
||||||
</ScrollViewer.GestureRecognizers>
|
</ScrollViewer.GestureRecognizers>
|
||||||
|
|
||||||
<ListBox Items="{Binding Channels, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
|
<!--<ListBox Items="{Binding FilteredChannels, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
|
||||||
SelectionMode="Single"
|
SelectionMode="Single"
|
||||||
SelectionChanged="SelectingItemsControl_OnSelectionChanged">
|
SelectionChanged="SelectingItemsControl_OnSelectionChanged">
|
||||||
|
|
||||||
@ -240,7 +240,7 @@
|
|||||||
</Grid>
|
</Grid>
|
||||||
</DataTemplate>
|
</DataTemplate>
|
||||||
</ListBox.ItemTemplate>
|
</ListBox.ItemTemplate>
|
||||||
</ListBox>
|
</ListBox>-->
|
||||||
|
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user