我是 MAUI 新手,我正在尝试使用 MVVM 模型。 我有一个 viewModel
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
属性正确初始化,但突然重置为空值。我尝试调试,但找不到任何原因。该问题似乎发生在编译器完成创建 BLEDeviceViewModel
实例后,返回到 MachineSelect
类,并且当 InitializeComponent()
方法完成时,某些东西会调用 PairedDevice
getter 并然后直接将setter设为null。
代码非常简单,所以我正在努力寻找解决方案。
我尝试使用
INotifyPropertyChanged
而不是 ObservableObject
,但问题仍然存在。我还尝试在我的 ViewModel 和模型中使用 [ObservableProperty]
,但没有任何改变。我发现正确运行应用程序的唯一方法是在设置之前检查该值:
public BLEDevice PairedDevice
{
get => _pairedDevice;
set
{
if (value != null)
SetProperty(ref _pairedDevice, value);
}
}
我在文档和论坛中在线搜索,但找不到类似的内容。我的带有值检查的代码可以工作,但我不喜欢它。我确定其他地方有问题
这是我的代码的修改部分,并且运行良好。
get => _pairedDevice;
set =>_pairedDevice = value;