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
相关产品推荐
相关产品推荐

