Xamarin表格 - 检查交换机是否已手动切换

时间:2017-07-13 03:51:36

标签: c# xamarin xamarin.forms

我正在编写一个Xamarin表单应用程序,用于检查用户是否在特定的地理位置。当用户走进某个区域时,XAML开关会从关闭位置切换到打开位置。

farmSwitch.toggled = true;

这会调用此函数

farmSwitch.Toggled += (object sender, ToggledEventArgs e) => {
            manualOnFarm = true;
            Console.WriteLine("Switch.Toggled event sent");
            changeOnFarmStatus(e);
        };

我还需要用户手动点击切换功能的功能,需要区别于代码自动切换farmSwitch

的时间

原因是我有一个布尔值,只有当用户手动点击farmSwitch时才应该为真,并且当自动切换开关时应该为假

我有什么选择?理想情况下,当用户手动点击farmSwitch时,我可以调用farSwtich.clicked()函数,但没有这样的运气

2 个答案:

答案 0 :(得分:2)

我不知道如何通过在您编写的代码中使用某种标记来区分这一点,以便以编程方式切换开关?

所以你以编程方式调用它,但你也设置了一个布尔标记来说这是一个编程变化:

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);
        };

这不会起作用吗?

答案 1 :(得分:2)

使用@ digitalsa1nt的建议或使用" - ="手动切换之前的方法并使用" + ="再次。