.NET MAUI MVVM游戏最高分本地存储与持久化显示实现方案
.NET MAUI MVVM 数学游戏最高分存储与同步实现方案
需求说明
- 在本地设备存储并显示最高分(highScore)
- 每次游玩结束后,关闭并重启应用时,主页面的最高分能自动更新
核心实现逻辑
借助.NET MAUI内置的Preferences轻量存储API,结合MVVM模式的属性变更通知机制,只需在两个关键环节编写代码即可实现需求:
1. 游戏结束时保存最高分(MultiplicationPageViewModel)
在游戏结束的逻辑中,判断当前得分是否超过现有最高分,若超过则更新Model的HighScore并持久化到本地:
public void GameOver() { // 检查当前得分是否超越最高分 if (playerModal.Score > playerModal.HighScore) { playerModal.HighScore = playerModal.Score; // 将最高分存入本地偏好设置 Preferences.Default.Set("HighScore", playerModal.HighScore); } NavigationService.NavigateToAsync(nameof(GameOverPage)); }
2. 主页面初始化时加载最高分(HomePageViewModel)
主页面ViewModel初始化阶段,从本地存储读取保存的最高分,同步到Model中以更新UI显示:
public HomePageViewModel(INavigationService navigationService) : base(navigationService) { // 从本地读取最高分,未存储过则默认返回0 int highScore = Preferences.Default.Get("HighScore", 0); // 同步到PlayerModal,触发UI自动更新 playerModal.HighScore = highScore; }
3. 确保UI实时响应变更(PlayerModal)
PlayerModal继承自ObservableObject,且HighScore标记了[ObservableProperty]特性,会自动生成属性变更通知,保证UI能实时同步最高分的变化:
public partial class PlayerModal : ObservableObject { [ObservableProperty] int highScore; // 其他属性... }
4. 主页面UI绑定(HomePage.xaml)
通过数据绑定直接关联ViewModel中的playerModal.HighScore,让UI自动显示最新的最高分:
<Label Text="{Binding playerModal.HighScore}" VerticalOptions="Center" HorizontalOptions="Center" FontAttributes="Bold" FontSize="30"/>
额外优化提示
- 确保
BaseViewModel.PlayerModal是单例实例,避免不同ViewModel使用不同Model导致数据不同步 - 对
Preferences的读写操作添加异常捕获,避免因存储权限问题引发崩溃 - 若从游戏页面返回主页面时需要立刻更新最高分,可在主页面的
OnAppearing方法中重新读取本地存储并同步Model
内容的提问来源于stack exchange,提问作者M3rtixius
相关产品推荐
相关产品推荐

