提交 cada8b5d 编写于 作者: A Anran Zhang

添加子分区的选中项管理

上级 ce9f5d3a
......@@ -36,11 +36,15 @@
IsBackButtonVisible="Collapsed"
IsPaneToggleButtonVisible="False"
IsSettingsVisible="False"
ItemInvoked="OnDetailNavigationViewItemInvoked"
MenuItemsSource="{x:Bind ViewModel.SubPartitionCollection}"
PaneDisplayMode="Top">
<muxc:NavigationView.Resources>
<SolidColorBrush x:Key="NavigationViewContentBackground" Color="Transparent" />
</muxc:NavigationView.Resources>
<muxc:NavigationView.MenuItemTemplate>
<DataTemplate x:DataType="uwp:SubPartitionViewModel">
<muxc:NavigationViewItem Content="{x:Bind Title, Mode=OneWay}" />
<muxc:NavigationViewItem Content="{x:Bind Title, Mode=OneWay}" Tag="{x:Bind SubPartitionId}" />
</DataTemplate>
</muxc:NavigationView.MenuItemTemplate>
</muxc:NavigationView>
......
// Copyright (c) Richasy. All rights reserved.
using System;
using System.ComponentModel;
using System.Linq;
using Richasy.Bili.App.Resources.Extension;
using Richasy.Bili.ViewModels.Uwp;
using Windows.UI.Xaml;
......@@ -26,6 +29,8 @@ namespace Richasy.Bili.App.Pages.Overlay
public PartitionDetailPage()
{
this.InitializeComponent();
this.Loaded += this.OnLoaded;
this.Unloaded += this.OnUnloaded;
}
/// <summary>
......@@ -57,5 +62,53 @@ namespace Richasy.Bili.App.Pages.Overlay
var animate = animationService.PrepareToAnimate("PartitionBackAnimate", this.PartitionHeader);
animate.Configuration = new DirectConnectedAnimationConfiguration();
}
private void OnUnloaded(object sender, RoutedEventArgs e)
{
ViewModel.PropertyChanged -= OnViewModelPropertyChanged;
}
private void OnLoaded(object sender, RoutedEventArgs e)
{
ViewModel.PropertyChanged += OnViewModelPropertyChanged;
CheckCurrentSubPartition();
}
private void OnViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(ViewModel.CurrentSelectedSubPartition))
{
CheckCurrentSubPartition();
}
}
private void OnDetailNavigationViewItemInvoked(Microsoft.UI.Xaml.Controls.NavigationView sender, Microsoft.UI.Xaml.Controls.NavigationViewItemInvokedEventArgs args)
{
var invokeItem = args.InvokedItemContainer as Microsoft.UI.Xaml.Controls.NavigationViewItem;
var subPartitionId = invokeItem.Tag == null ? -1 : Convert.ToInt32(invokeItem.Tag);
SubPartitionViewModel vm;
if (subPartitionId == -1)
{
vm = ViewModel.SubPartitionCollection.First();
}
else
{
vm = ViewModel.SubPartitionCollection.Where(p => p.SubPartitionId == subPartitionId).FirstOrDefault();
}
ViewModel.CurrentSelectedSubPartition = vm;
}
private void CheckCurrentSubPartition()
{
var vm = ViewModel.CurrentSelectedSubPartition;
if (vm != null)
{
if (!(DetailNavigationView.SelectedItem is SubPartitionViewModel selectedItem) || selectedItem != vm)
{
DetailNavigationView.SelectedItem = vm;
}
}
}
}
}
......@@ -35,6 +35,12 @@ namespace Richasy.Bili.ViewModels.Uwp
/// </summary>
public int PartitionId => _partition?.Tid ?? 0;
/// <summary>
/// 当前选中的子分区.
/// </summary>
[Reactive]
public SubPartitionViewModel CurrentSelectedSubPartition { get; set; }
/// <inheritdoc/>
public override bool Equals(object obj) => obj is PartitionViewModel model && PartitionId == model.PartitionId;
......
// Copyright (c) Richasy. All rights reserved.
using System.Collections.ObjectModel;
using System.Linq;
using Richasy.Bili.Models.BiliBili;
namespace Richasy.Bili.ViewModels.Uwp
......@@ -35,6 +36,8 @@ namespace Richasy.Bili.ViewModels.Uwp
{
this.SubPartitionCollection.Insert(0, new SubPartitionViewModel(null));
}
this.CurrentSelectedSubPartition = this.SubPartitionCollection.First();
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册