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

ContentDialog内元素绑定状态丢失:复选框关闭重开恢复默认

问题原因与解决方案

你遇到的问题不是ContentDialog的已知问题,核心原因是每次打开菜单页面时,都新建了一个MenuViewModel实例,之前修改的ShowFPS状态没有被保留,所以重新打开后会回到默认的false。

解决思路与实现方案

方案1:复用MenuViewModel实例(保持内存状态)

把MenuViewModel改成单例模式,确保整个应用生命周期内只有一个实例,这样状态会一直保留:

修改MenuViewModel代码:

namespace NScumm.MonoGame.ViewModels
{
    public class MenuViewModel : ViewModel, IMenuViewModel
    {
        // 全局单例实例
        private static MenuViewModel _instance;
        public static MenuViewModel Instance => _instance ??= new MenuViewModel();

        private bool _showFPS;

        public bool ShowFPS
        {
            get { return _showFPS; }
            set 
            { 
                RaiseAndSetIfChanged(ref _showFPS, value);
            }
        }

        // 私有构造函数,禁止外部直接实例化
        private MenuViewModel() {}
    }
}

然后修改页面构造函数,使用单例实例:

public MainMenuPage()
{
    InitializeComponent();

    Vm = MenuViewModel.Instance;
    DataContext = Vm;
}

方案2:持久化状态到本地存储(重启应用也能保留)

如果需要重启应用后依然保留设置,可以把ShowFPS的状态保存到本地设置中:

修改MenuViewModel的ShowFPS属性:

namespace NScumm.MonoGame.ViewModels
{
    public class MenuViewModel : ViewModel, IMenuViewModel
    {
        private bool _showFPS;

        public bool ShowFPS
        {
            get 
            { 
                // 从本地设置读取,默认值为false
                if (Windows.Storage.ApplicationData.Current.LocalSettings.Values.TryGetValue("ShowFPS", out var storedValue))
                {
                    _showFPS = (bool)storedValue;
                }
                return _showFPS; 
            }
            set 
            { 
                if (RaiseAndSetIfChanged(ref _showFPS, value))
                {
                    // 将修改后的值保存到本地设置
                    Windows.Storage.ApplicationData.Current.LocalSettings.Values["ShowFPS"] = value;
                }
            }
        }
    }
}

页面构造函数不需要修改,这样每次打开页面时,ViewModel会从本地读取之前保存的状态,修改后也会自动保存。

内容的提问来源于stack exchange,提问作者user237251

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:42:35