У меня есть довольно простая тестовая страница с именем SettingsPage
, которая содержит кнопку в xaml следующим образом:
<Button Text="Toggle Compass" Command="{Binding toggleCompassCmd}"/>
Класс CompassTest
реализует INotifyPropertyChanged
и добавляет новую команду с именемtoggleCompassCmd
:
using System;
using System.ComponentModel;
using System.Windows.Input;
using Xamarin.Essentials;
using Xamarin.Forms;
namespace HelloWorld.Models
{
public class CompassTest : INotifyPropertyChanged
{
// Set speed delay for monitoring changes.
SensorSpeed speed = SensorSpeed.UI;
public ICommand toggleCompassCmd { private set; get; }
private CompassData m_data;
protected CompassData compassData
{
get { return m_data; }
private set { m_data = value; }
}
public event PropertyChangedEventHandler PropertyChanged;
public CompassTest()
{
// Register for reading changes, be sure to unsubscribe when finished
Compass.ReadingChanged += onCompassReadingChanged;
// setup toggle command
toggleCompassCmd = new Command(
execute: () =>
{
Console.WriteLine("This is execute of toggleCompassCmd!");
toggleCompass();
},
canExecute: () =>
{
return true;
});
}
void onCompassReadingChanged(object sender, CompassChangedEventArgs e)
{
var data = e.Reading;
Console.WriteLine($"Reading: {data.HeadingMagneticNorth} degrees");
// Process Heading Magnetic North
compassData = data;
onPropertyChanged("compassData");
}
protected void onPropertyChanged(string propName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("DateTime"));
}
}
public void toggleCompass()
{
Console.WriteLine("toggleCompass()");
try
{
if (Compass.IsMonitoring)
Compass.Stop();
else
Compass.Start(speed);
}
catch (FeatureNotSupportedException fnsEx)
{
Console.WriteLine("FeatureNotSupportedException: " + fnsEx.ToString());
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.ToString());
}
}
}
}
В классе xaml у меня есть член типа CompassTest
, который должен получить команду следующим образом:
public SettingsPage()
{
InitializeComponent();
compass = new CompassTest();
}
Однако все компилируется, но ничего не срабатывает.Как мне «перенаправить» команду на член?