You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 05:47:03