Compare commits

...

1 Commits

Author SHA1 Message Date
qhy040404
2c77cff443 impl #896 2024-04-26 12:03:16 +08:00
3 changed files with 22 additions and 13 deletions

View File

@@ -30,7 +30,7 @@ internal static class AchievementFinishPercent
throw HutaoException.InvalidCast<IEnumerable<AchievementView>, List<AchievementView>>("AchievementViewModel.Achievements.SourceCollection"); throw HutaoException.InvalidCast<IEnumerable<AchievementView>, List<AchievementView>>("AchievementViewModel.Achievements.SourceCollection");
} }
Dictionary<AchievementGoalId, AchievementGoalStatistics> counter = achievementGoals.ToDictionary(x => x.Id, AchievementGoalStatistics.From); Dictionary<AchievementGoalId, AchievementGoalStatistics> counter = achievementGoals.SourceCollection.ToDictionary(x => x.Id, AchievementGoalStatistics.From);
foreach (ref readonly AchievementView achievementView in CollectionsMarshal.AsSpan(list)) foreach (ref readonly AchievementView achievementView in CollectionsMarshal.AsSpan(list))
{ {

View File

@@ -43,6 +43,8 @@ internal sealed class AchievementView : ObservableObject, IEntityWithMetadata<Mo
/// </summary> /// </summary>
public Model.Metadata.Achievement.Achievement Inner { get; } public Model.Metadata.Achievement.Achievement Inner { get; }
public uint Order => Inner.Order;
/// <summary> /// <summary>
/// 是否选中 /// 是否选中
/// </summary> /// </summary>

View File

@@ -28,13 +28,17 @@ namespace Snap.Hutao.ViewModel.Achievement;
[Injection(InjectAs.Scoped)] [Injection(InjectAs.Scoped)]
internal sealed partial class AchievementViewModel : Abstraction.ViewModel, INavigationRecipient internal sealed partial class AchievementViewModel : Abstraction.ViewModel, INavigationRecipient
{ {
private readonly SortDescription uncompletedItemsFirstSortDescription = new(nameof(AchievementView.IsChecked), SortDirection.Ascending); private readonly SortDescription achievementUncompletedItemsFirstSortDescription = new(nameof(AchievementView.IsChecked), SortDirection.Ascending);
private readonly SortDescription completionTimeSortDescription = new(nameof(AchievementView.Time), SortDirection.Descending); private readonly SortDescription achievementCompletionTimeSortDescription = new(nameof(AchievementView.Time), SortDirection.Descending);
private readonly SortDescription achievementGoalUncompletedItemsFirstSortDescription = new(nameof(AchievementGoalView.FinishPercent), SortDirection.Ascending);
private readonly SortDescription achievementDefaultSortDescription = new(nameof(AchievementView.Order), SortDirection.Ascending);
private readonly SortDescription achievementGoalDefaultSortDescription = new(nameof(AchievementGoalView.Order), SortDirection.Ascending);
private readonly AchievementViewModelDependencies dependencies; private readonly AchievementViewModelDependencies dependencies;
private AdvancedCollectionView<AchievementView>? achievements; private AdvancedCollectionView<AchievementView>? achievements;
private List<AchievementGoalView>? achievementGoals; private AdvancedCollectionView<AchievementGoalView>? achievementGoals;
private AchievementGoalView? selectedAchievementGoal; private AchievementGoalView? selectedAchievementGoal;
private ObservableCollection<EntityAchievementArchive>? archives; private ObservableCollection<EntityAchievementArchive>? archives;
private EntityAchievementArchive? selectedArchive; private EntityAchievementArchive? selectedArchive;
@@ -67,7 +71,7 @@ internal sealed partial class AchievementViewModel : Abstraction.ViewModel, INav
set => SetProperty(ref achievements, value); set => SetProperty(ref achievements, value);
} }
public List<AchievementGoalView>? AchievementGoals public AdvancedCollectionView<AchievementGoalView>? AchievementGoals
{ {
get => achievementGoals; get => achievementGoals;
set => SetProperty(ref achievementGoals, value); set => SetProperty(ref achievementGoals, value);
@@ -141,7 +145,7 @@ internal sealed partial class AchievementViewModel : Abstraction.ViewModel, INav
await dependencies.TaskContext.SwitchToMainThreadAsync(); await dependencies.TaskContext.SwitchToMainThreadAsync();
AchievementGoals = sortedGoals; AchievementGoals = new(sortedGoals, true);
Archives = archives; Archives = archives;
SelectedArchive = dependencies.AchievementService.CurrentArchive; SelectedArchive = dependencies.AchievementService.CurrentArchive;
return true; return true;
@@ -299,20 +303,23 @@ internal sealed partial class AchievementViewModel : Abstraction.ViewModel, INav
[Command("SortUncompletedSwitchCommand")] [Command("SortUncompletedSwitchCommand")]
private void UpdateAchievementsSort() private void UpdateAchievementsSort()
{ {
if (Achievements is null) if (Achievements is null || AchievementGoals is null)
{ {
return; return;
} }
Achievements.SortDescriptions.Clear();
AchievementGoals.SortDescriptions.Clear();
if (IsUncompletedItemsFirst) if (IsUncompletedItemsFirst)
{ {
Achievements.SortDescriptions.Add(uncompletedItemsFirstSortDescription); Achievements.SortDescriptions.Add(achievementUncompletedItemsFirstSortDescription);
Achievements.SortDescriptions.Add(completionTimeSortDescription); Achievements.SortDescriptions.Add(achievementCompletionTimeSortDescription);
} AchievementGoals.SortDescriptions.Add(achievementGoalUncompletedItemsFirstSortDescription);
else
{
Achievements.SortDescriptions.Clear();
} }
Achievements.SortDescriptions.Add(achievementDefaultSortDescription);
AchievementGoals.SortDescriptions.Add(achievementGoalDefaultSortDescription);
} }
private void UpdateAchievementsFilterByGoal(AchievementGoalView? goal) private void UpdateAchievementsFilterByGoal(AchievementGoalView? goal)