Started working on ReactiveUI implementation
This commit is contained in:
parent
6373a47cf6
commit
8fec3171df
@ -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" />
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using ReactiveUI;
|
||||
|
||||
namespace BetterRaid.ViewModels;
|
||||
|
||||
public class ViewModelBase : ObservableObject
|
||||
public class ViewModelBase : ReactiveObject
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -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>
|
||||
|
||||
|
Reference in New Issue
Block a user