Свойство Observable автоматически сбрасывается с помощью ObservableObject в MAUIC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Свойство Observable автоматически сбрасывается с помощью ObservableObject в MAUI

Сообщение Anonymous »

Я новичок в MAUI и пытаюсь использовать модель MVVM.
У меня есть модель представления

Код: Выделить всё

BLEDeviceViewModel
[/b], представление

Код: Выделить всё

MachineSelect
[/b] и модель

Код: Выделить всё

BLEDevice
[/b].
В

Код: Выделить всё

MachineSelect.xaml.cs
[/b], у меня есть следующий код:

Код: Выделить всё

public partial class MachineSelect : ContentPage
{
public MachineSelect(BLEDeviceViewModel viewModel)
{
BindingContext = viewModel;
InitializeComponent();
}
}
Экземпляр

Код: Выделить всё

BLEDeviceViewModel
[/b] создается в

Код: Выделить всё

MauiProgram.cs
[/b] как синглтон и внедряется при создании

Код: Выделить всё

MachineSelect. В BLEDeviceViewModel.cs
[/b], у меня есть этот код:

Код: Выделить всё

    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
[/b], код прост:

Код: Выделить всё

public class BLEDevice
{
public string Name { get; set; } = "";
public string UUID { get; set; } = "";
}
Проблема в том, что когда я запускаю приложение,

Код: Выделить всё

_pairedDeviceСвойство 
[/b] инициализируется правильно, но внезапно сбрасывается до нулевого значения. Я попробовал отладку и не нашел причины для этого. Кажется, проблема возникает после того, как компилятор завершает создание экземпляра .

Код: Выделить всё

BLEDeviceViewModel
[/b] возвращает к

Код: Выделить всё

MachineSelect
[/b] и когда

Код: Выделить всё

InitializeComponent()
[/b] завершается, что-то вызывает

Код: Выделить всё

PairedDevice
[/b] получатель, а затем непосредственно установщик со значением null.
Код очень простой, поэтому я изо всех сил пытаюсь найти решение.
Я пробовал использовать

Код: Выделить всё

INotifyPropertyChanged
[/b] вместо

Код: Выделить всё

ObservableObject
[/b], но проблема остается. Я также пробовал использовать

Код: Выделить всё

[ObservableProperty]
[/b] в моей ViewModel и в моей модели, но ничего не изменилось. Единственный способ правильно запустить приложение — это проверить значение перед его установкой:

Код: Выделить всё

public BLEDevice PairedDevice
{
get => _pairedDevice;
set
{
if (value != null)
SetProperty(ref _pairedDevice, value);
}
}
Я искал в Интернете документацию и форумы, но не нашел ничего похожего. Мой код с проверкой значений работает, но мне это не нравится. Я уверен, что проблема где-то еще

Подробнее здесь: https://stackoverflow.com/questions/791 ... ct-in-maui
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»