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

MAUI中ObservableObject的Observable属性自动重置问题

MAUI MVVM中PairedDevice属性被莫名重置为null的问题

更新说明

尝试多种方案后未解决问题,已更换实现思路。原错误代码已丢失,但问题相关代码均已提供,本问题已无继续存在的意义。

问题背景

我是MAUI新手,采用MVVM模式开发,涉及以下核心组件:

  • 视图模型:BLEDeviceViewModel
  • 视图:MachineSelect
  • 模型:BLEDevice

核心代码展示

MachineSelect.xaml.cs

public partial class MachineSelect : ContentPage
{
    public MachineSelect(BLEDeviceViewModel viewModel)
    {
        BindingContext = viewModel;
        InitializeComponent();
    }
}

依赖注入配置

BLEDeviceViewModel 实例在 MauiProgram.cs 中以单例形式注册,在创建 MachineSelect 页面时通过依赖注入传入。

BLEDeviceViewModel.cs

public partial class BLEDeviceViewModel : ObservableObject
{
    private BLEDevice _pairedDevice;

    public BLEDevice PairedDevice
    {
        get => _pairedDevice;
        set => SetProperty(ref _pairedDevice, value);
    }

    public BLEDeviceViewModel()
    {
        PairedDevice = new()
        {
            Name = Preferences.Get("PairedDeviceNAME", "Unknown"),
            UUID = Preferences.Get("PairedDeviceUUID", string.Empty)
        };
    }
}

BLEDevice 模型

public class BLEDevice
{
    public string Name { get; set; } = "";
    public string UUID { get; set; } = "";
}

问题现象

应用启动后,_pairedDevice 属性初始化正常,但会突然被重置为null。调试追踪发现:在 BLEDeviceViewModel 实例创建完成、返回 MachineSelect 类且 InitializeComponent() 执行完毕后,有未知操作先调用 PairedDevice 的getter,紧接着调用setter将其赋值为null。

已尝试的解决方式

  • 替换 ObservableObject 为手动实现 INotifyPropertyChanged,问题未解决
  • 在视图模型和模型中使用 [ObservableProperty] 特性,无效
  • 临时可行方案:在 PairedDevice 的setter中增加非空判断,可避免被重置为null,但这只是治标不治本的办法,确信存在未被发现的潜在问题:
public BLEDevice PairedDevice
{
    get => _pairedDevice;
    set
    {
        if (value != null)
            SetProperty(ref _pairedDevice, value);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:45:13