Я пишу приложение для форм 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();
}
}
}
Как я могу получить изменение в статусе адаптера, которое будет распространено на модель представления?