Привязка ViewModel к службе Bluetooth - PullRequest
0 голосов
/ 18 апреля 2019

Я пишу приложение для форм xamarin и хочу связать свойство в моей ViewModel с состоянием адаптера Bluetooth (вкл / выкл). В свою очередь, я хочу привязать переключатель в моем View к ViewModel, который отражает и может включать и выключать адаптер Bluetooth.

По сути, мне нужен переключатель, который можно установить и точно отражать состояние адаптера Bluetooth.

Поскольку это приложение форм xamarin, я использую службу зависимостей для доступа к Bluetooth на каждой платформе.

Общая структура выглядит следующим образом: View (Переключение) <-> ViewModel (Свойство) <-> Интерфейс (служба зависимостей) <-> Платформа Bluetooth (Android)

View и ViewModel связываются друг с другом без проблем, поэтому я опущу эту деталь.

Вот что у меня есть:

public class BluetoothViewModel : INotifyPropertyChanged
{
    //Ask the container to resolve the service only once.
    private BluetoothServices bluetoothServices;
    protected BluetoothServices BTService => bluetoothServices ?? (bluetoothServices = DependencyService.Get<BluetoothServices>());

    // ... OnPropertyChanged() implementation

    public bool AdapterStatus    // Switch in the View binds to this
    {
        get => BTService.AdapterStatus;
        set
        {
            BTService.AdapterStatus = value;
            OnPropertyChanged();
        }
    }
}



public interface BluetoothServices   // BluetoothServices interface, used for the bluetooth dependency service
{
    bool AdapterStatus { get; set; } // Gets/Sets the Bluetooth adapter status
}



public sealed class BluetoothReceiver : BluetoothServices, INotifyPropertyChanged
{
     private static BluetoothAdapter adapter;

     public bool AdapterStatus
    {
        get => (adapter != null ? adapter.IsEnabled : false);
        set
        {
            if (adapter != null && adapter.IsEnabled != value) // Check that the adapter exists and the status needs to be changed
            {
                switch (value)
                {
                    case false:
                        adapter.Disable();  // Disable adapter to reflect switch state
                        break;

                    case true:
                        adapter.Enable();   // Enable adapter
                        break;

                    default:

                        break;
                }

                OnPropertyChanged();
            }
        }
    }

Как я могу получить изменение в статусе адаптера, которое будет распространено на модель представления?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...