如何解决检测 Xamarin Forms 中复选框的 CheckChanged 来源
除了用户实际选中/取消选中之外,CheckedChanged
的 CheckBox
事件在页面加载时(数据绑定时)被触发。
有没有办法检测 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 举报,一经查实,本站将立刻删除。