我正在编写Xamarin表单应用程序,该应用程序检查用户是否在特定地理位置.当用户走进某个区域时,XAML开关将从关闭位置切换到打开位置.
farmSwitch.toggled = true;
这称为此功能
farmSwitch.Toggled += (object sender, ToggledEventArgs e) => {
manualOnFarm = true;
Console.WriteLine("Switch.Toggled event sent");
changeOnFarmStatus(e);
};
我还需要用户手动单击开关的功能,该功能需要与代码自动切换FarmSwitch时的功能区分开
原因是我有一个布尔值,仅当用户手动单击farmSwitch时才为true,而在自动切换开关时应为false
我有什么选择?理想情况下,当用户手动单击farmSwitch时会调用farSwtich.clicked()函数,但是没有这种运气
解决方法:
我看不到如何仅通过在编写的代码中使用某种标记来以编程方式切换开关来区分这两者之间的区别?
因此,您可以以编程方式调用此方法,但还可以设置一个布尔标记以表示这是程序性更改:
private bool HasBeenProgrammaticallyToggled = false;
public void ThisIsAProgrammaticToggle()
{
HasBeenProgrammaticallyToggled = true;
farmSwitch.toggled = true;
}
在您的切换事件中,只需执行以下操作:
farmSwitch.Toggled += (object sender, ToggledEventArgs e) => {
if(HasBeenProgrammaticallyToggled)
{
//This has been toggled programmatically, so reset our bool
HasBeenProgrammaticallyToggled = false;
}
else
{
// I am assuming this is what you use to determine a manual toggle?
manualOnFarm = true;
}
Console.WriteLine("Switch.Toggled event sent");
changeOnFarmStatus(e);
};
这行不行吗?