跳到主要内容
版本:11.0.0

在启动时加载数据

在本页上,您将添加代码以在应用程序启动时从磁盘加载用户的专辑收藏。

您已经在业务服务中添加了可以从磁盘加载所需文件的代码,现在需要做的就是在主窗口视图模型中添加一些代码来处理启动。

按照以下步骤添加一个方法来从磁盘加载用户的专辑收藏:

  • 如果应用程序正在运行,请停止它。
  • 找到并打开 MainWindowViewModel.cs 文件。
  • 顶部添加'using Avalonia.MusicStore.Models;'
  • 顶部添加'using System.Linq;'
  • 添加如下所示的代码:
private async void LoadAlbums()
{
var albums = (await Album.LoadCachedAsync()).Select(x => new AlbumViewModel(x));

foreach (var album in albums)
{
Albums.Add(album);
}

foreach (var album in Albums.ToList())
{
await album.LoadCover();
}
}

正如您所看到的,这个方法使用业务服务从磁盘缓存中加载专辑列表。然后,它将每个数据模型(Album 类)转换为视图模型(AlbumViewModel 类)。在此之后,所有专辑视图模型都将添加到可观察集合中,这将立即使用专辑的文本数据更新 UI。

您会注意到,在加载 JSON 专辑文件之后,第二个循环加载封面艺术图片文件。这为用户提供了尽可能快的视觉反馈(以专辑磁贴的形式,包含文本和占位符音符图标),告诉用户收藏中有哪些专辑。然后异步加载封面图像,这确保了在图像加载过程中应用程序仍能保持响应。

下一步是在应用程序启动时调度 LoadAlbum 方法运行。

要在主线程上调度该方法,请按照以下步骤进行:

  • 保持 MainWindowViewModel.cs 文件打开。
  • 添加对 using System.Reactive.Concurrency; 的引用。
  • 将以下代码添加到类的构造函数中:
RxApp.MainThreadScheduler.Schedule(LoadAlbums);
  • 点击调试以编译和运行项目。