检测 Xamarin Forms 中复选框的 CheckChanged 来源

问题描述

除了用户实际选中/取消选中之外,CheckedChangedCheckBox 事件在页面加载时(数据绑定时)被触发。

有没有办法检测 CheckedChanged 事件是由用户操作还是其他方式触发的?

在 WinForms/WPF 中,我曾经定义一个布尔变量,如 Loading = true;然后用来设置Loading = false;一旦页面加载完成。然后,CheckedChanged 事件将检查 Loading 是否为 false 以执行逻辑。这是我以前的做法:

private void CheckBox_CheckedChanged(object sender,CheckedChangedEventArgs e)
{
    if (Loading == true) return;

    //execute logic...
}

使用异步函数,我无法正确适应加载技巧。有没有更好的办法?

解决方法

在 WinForms/WPF 中,我曾经定义一个布尔变量,如 Loading = true;然后用来设置Loading = false;一旦页面加载完成。然后,CheckedChanged 事件将检查 Loading 是否为 false 以执行逻辑。这是我以前的做法:

我在设置 BindingContext = new checkmodel() 之前和之后更改 bool userchecked 值,以检测 CheckBox_CheckedChanged 第一次触发器是用户绑定还是数据绑定。

 public partial class Page18 : ContentPage
{
    private bool userchecked;   
    public Page18()
    {
        InitializeComponent();
        userchecked = false;          
        this.BindingContext = new checkmodel();
        userchecked = true; 
    }

    private void CheckBox_CheckedChanged(object sender,CheckedChangedEventArgs e)
    {
        if(userchecked==true)
        {
            Console.WriteLine("user checked!");
        }
        else
        {
            Console.WriteLine("don't user checked!");
        }
    }

  
}

public class checkmodel:ViewModelBase
{
    private bool _ischecked;
    public bool ischecked
    {
        get { return _ischecked; }
        set
        {
            _ischecked = value;
            RaisePropertyChanged("ischecked");
        }
    }
    public checkmodel()
    {
        ischecked = true;
    }
}

ViewModelBase 是实现 INotifyPropertyChanged 的​​类,用于通知数据更新。

 public class ViewModelBase : INotifyPropertyChanged
{
  
    public event PropertyChangedEventHandler PropertyChanged;

   
    public void RaisePropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this,new PropertyChangedEventArgs(propertyName));
        }
    }
}