wabbajack/Wabbajack/Views/ModListGalleryView.xaml.cs

72 lines
3.0 KiB
C#
Raw Normal View History

using System;
using System.Diagnostics;
using System.Reactive.Disposables;
using System.Reactive.Linq;
2019-11-09 13:30:36 +00:00
using System.Windows;
using System.Windows.Controls;
using MahApps.Metro.Controls;
using ReactiveUI;
2019-11-09 13:30:36 +00:00
using Wabbajack.Lib.ModListRegistry;
2019-11-30 09:08:04 +00:00
namespace Wabbajack
2019-11-09 13:30:36 +00:00
{
public partial class ModListGalleryView : ReactiveUserControl<ModListGalleryVM>
2019-11-09 13:30:36 +00:00
{
public ModListGalleryView()
{
InitializeComponent();
this.WhenActivated(dispose =>
{
this.WhenAny(x => x.ViewModel.BackCommand)
.BindToStrict(this, x => x.BackButton.Command)
.DisposeWith(dispose);
this.WhenAny(x => x.ViewModel.ModLists)
.BindToStrict(this, x => x.ModListGalleryControl.ItemsSource)
.DisposeWith(dispose);
Observable.CombineLatest(
this.WhenAny(x => x.ViewModel.Error),
this.WhenAny(x => x.ViewModel.Loaded),
resultSelector: (err, loaded) =>
{
if (!err?.Succeeded ?? false) return true;
return !loaded;
})
.DistinctUntilChanged()
.Select(x => x ? Visibility.Visible : Visibility.Collapsed)
.StartWith(Visibility.Collapsed)
.BindToStrict(this, x => x.LoadingRing.Visibility)
.DisposeWith(dispose);
2020-01-19 04:37:21 +00:00
Observable.CombineLatest(
this.WhenAny(x => x.ViewModel.ModLists.Count)
.Select(x => x > 0),
this.WhenAny(x => x.ViewModel.Loaded),
resultSelector: (hasContent, loaded) =>
2020-01-19 04:37:21 +00:00
{
return !hasContent && loaded;
2020-01-19 04:37:21 +00:00
})
.DistinctUntilChanged()
2020-01-19 04:37:21 +00:00
.Select(x => x ? Visibility.Visible : Visibility.Collapsed)
.StartWith(Visibility.Collapsed)
.BindToStrict(this, x => x.NoneFound.Visibility)
.DisposeWith(dispose);
2020-01-19 04:37:21 +00:00
this.WhenAny(x => x.ViewModel.Error)
.Select(e => (e?.Succeeded ?? true) ? Visibility.Collapsed : Visibility.Visible)
.StartWith(Visibility.Collapsed)
2020-01-19 04:37:21 +00:00
.BindToStrict(this, x => x.ErrorIcon.Visibility)
.DisposeWith(dispose);
this.BindStrict(this.ViewModel, vm => vm.Search, x => x.SearchBox.Text)
.DisposeWith(dispose);
this.BindStrict(this.ViewModel, vm => vm.OnlyInstalled, x => x.OnlyInstalledCheckbox.IsChecked)
.DisposeWith(dispose);
this.WhenAny(x => x.ViewModel.ClearFiltersCommand)
.BindToStrict(this, x => x.ClearFiltersButton.Command)
.DisposeWith(dispose);
});
2019-11-09 13:30:36 +00:00
}
}
}