微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决检测 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));
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。