using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using Avalonia.Media; using DownKyi.Core.BiliApi.Users.Models; using DownKyi.Core.BiliApi.Zone; using DownKyi.Utils; using Prism.Commands; using Prism.Events; using Prism.Regions; namespace DownKyi.ViewModels.UserSpace; /// /// 投稿页面 /// public class ViewArchiveViewModel : ViewModelBase { public const string Tag = "PageUserSpaceArchive"; private long _mid = -1; #region 页面属性申明 private ObservableCollection _publicationZones; public ObservableCollection PublicationZones { get => _publicationZones; set => SetProperty(ref _publicationZones, value); } private int _selectedItem; public int SelectedItem { get => _selectedItem; set => SetProperty(ref _selectedItem, value); } #endregion public ViewArchiveViewModel(IEventAggregator eventAggregator) : base(eventAggregator) { #region 属性初始化 PublicationZones = new ObservableCollection(); #endregion } #region 命令申明 // 视频选择事件 private DelegateCommand? _publicationZonesCommand; public DelegateCommand PublicationZonesCommand => _publicationZonesCommand ??= new DelegateCommand(ExecutePublicationZonesCommand); /// /// 视频选择事件 /// /// private void ExecutePublicationZonesCommand(object parameter) { if (parameter is not PublicationZone zone) { return; } var data = new Dictionary { { "mid", _mid }, { "tid", zone.Tid }, { "list", PublicationZones.ToList() } }; // 进入视频页面 NavigateToView.NavigationView(EventAggregator, ViewPublicationViewModel.Tag, ViewUserSpaceViewModel.Tag, data); SelectedItem = -1; } #endregion public override void OnNavigatedFrom(NavigationContext navigationContext) { base.OnNavigatedFrom(navigationContext); PublicationZones.Clear(); SelectedItem = -1; } /// /// 接收mid参数 /// /// public override void OnNavigatedTo(NavigationContext navigationContext) { base.OnNavigatedTo(navigationContext); PublicationZones.Clear(); SelectedItem = -1; // 根据传入参数不同执行不同任务 var parameter = navigationContext.Parameters.GetValue>("object"); if (parameter == null) { return; } // 传入mid _mid = navigationContext.Parameters.GetValue("mid"); var videoCount = 0; foreach (var zone in parameter) { videoCount += zone.Count; var iconKey = VideoZoneIcon.Instance().GetZoneImageKey(zone.Tid); _publicationZones.Add(new PublicationZone { Tid = zone.Tid, Icon = DictionaryResource.Get(iconKey), Name = zone.Name, Count = zone.Count }); } // 全部 _publicationZones.Insert(0, new PublicationZone { Tid = 0, Icon = DictionaryResource.Get("videoUpDrawingImage"), Name = DictionaryResource.GetString("AllPublicationZones"), Count = videoCount }); } }