在Xamarin窗体上创建ICommand可绑定属性

在Xamarin窗体上创建ICommand可绑定属性,xamarin,xamarin.forms,custom-controls,bindable,Xamarin,Xamarin.forms,Custom Controls,Bindable,我使用ICommand属性和相应的bindable属性创建了一个自定义复选框控件(我的复选框是Xamarin.Forms XAML页面),代码是: 复选框.xaml CheckBox.xaml.cs public分部类复选框:ContentView { 私有静态图像源未选中图像; 私有静态图像源检查图像; 公共复选框() { 初始化组件(); uncheckedImage=ImageSource.FromResource(“cbUnchecked.png”); checkedImage=Im

我使用ICommand属性和相应的bindable属性创建了一个自定义复选框控件(我的复选框是Xamarin.Forms XAML页面),代码是:

复选框.xaml


CheckBox.xaml.cs

public分部类复选框:ContentView
{
私有静态图像源未选中图像;
私有静态图像源检查图像;
公共复选框()
{
初始化组件();
uncheckedImage=ImageSource.FromResource(“cbUnchecked.png”);
checkedImage=ImageSource.FromResource(“cbChecked.png”);
imgCheckBox.Source=uncheckdimage;
}
公共静态只读BindableProperty是检查属性=
BindableProperty.Create(
复选框=>
checkbox.IsChecked,
假,,
属性更改:(可绑定、旧值、新值)=>
{
复选框=(复选框)可绑定;
EventHandler EventHandler=checkbox.CheckedChanged;
if(eventHandler!=null)
{
eventHandler(复选框,newValue);
}
});        
公共场所被检查
{
set{SetValue(IsCheckedProperty,value);}
获取{return(bool)GetValue(IsCheckedProperty);}
}
void OnCheckBoxTapped(对象发送方、事件args args)
{
IsChecked=!IsChecked;
如果(已检查)
{
imgCheckBox.Source=检查图像;
}
其他的
{
imgCheckBox.Source=uncheckdimage;
}
}
公共静态只读BindableProperty CheckBoxCommandProperty=
BindableProperty.Create(
复选框=>
checkbox.CheckBoxCommand,
无效的
BindingMode.TwoWay,
属性更改:(可绑定、旧值、新值)=>
{
复选框=(复选框)可绑定;
EventHandler EventHandler=checkbox.CheckedChanged;
if(eventHandler!=null)
{
eventHandler(复选框,checkbox.IsChecked);
}
});
公共事件事件处理程序CheckedChanged;
公共ICommand CheckBoxCommand
{
获取{return(ICommand)GetValue(CheckBoxCommandProperty);}
set{SetValue(CheckBoxCommandProperty,value);}
}
}
此复选框实现位于另一个名为TermsAndConditionsPage的页面上,该页面也是一个Xamarin.Forms XAML页面,实现代码为:


此页后面的代码为空(带有InitializeComponent()的构造函数)。 我还有此页面的ViewModel,其中包含以下代码:

TermsAndConditionsViewModel.cs

private string\u txtCheckBox;
公共字符串TXT复选框
{get{return}txtCheckBox;}
设置
{ 
_txtCheckBox=值;
OnPropertyChanged(“txtCheckBox”);
}
}
下一个是私人住宅;
下一个公共图书馆被启用了
{
获取{return\u Next\u IsEnabled;}
设置
{
_Next_IsEnabled=值;
OnPropertyChanged(“下一次启用”);
}
}
私人住宅被检查改变;
公共学校被检查了
{
获取{return\u IsCheckedChanged;}
设置
{ 
_IsCheckedChanged=值;
财产变更(“IsCheckedChanged”);
}
}
public ICommand Next_OnClick{get;set;}
公共ICommand OnCheckBoxTapChanged{get;set;}
公共术语和条件视图模型()
{
txtCheckBox=“我同意条款和条件”;
Next_OnClick=new命令(nextclick);
OnCheckBoxTapChanged=新命令(checkboxtaped);
}
私有void CheckBoxTapped()
{
如果(IsCheckedChanged)
{Next_IsEnabled=true;}
其他的
{Next_IsEnabled=false;}
}
私有void NextClicked()
{App.Current.MainPage=新视图.HelloWorld();}
#区域INPC
公共void OnPropertyChanged(字符串propertyName)
{
if(PropertyChanged!=null)
{PropertyChanged(这是新的PropertyChangedEventArgs(propertyName));}
}
公共事件属性更改事件处理程序属性更改;
#端区
现在,提问时间:我遇到的问题是CheckBoxTapped命令不起作用,我的意思是,它不起任何作用,尽管每次我触摸它时,复选框图像都会改变,但它不会改变我按钮的Next_IsEnabled属性。我想知道,为了使这个命令正常工作,我缺少了什么

编辑

我要寻找的是一个与按钮行为类似的命令

谢谢大家抽出时间

类似这样的代码(伪代码):

public类YourClassName:View
{
公共类名称()
{
var gestureerecognizer=新的Tapgestureerecognizer();
手势识别器。点击+=(s,e)=>{
if(Command!=null&&Command.CanExecute(null)){
Command.Execute(null);
}
};
var label=新标签();
label.gestureignizers.Add(gestureignizer);
}
公共静态只读BindableProperty CommandProperty=
创建(x=>x.Command,null);
公共ICommand命令
{
获取{return(ICommand)GetValue(CommandProperty);}
set{SetValue(CommandProperty,value);}
}
}
由于现在已过时,以下是新方法:

使用System.Windows.Input;
公共分部类示例:ContentView
{
//BindableProperty实现
公共静态只读BindableProperty CommandProperty=
Create(nameof(命令)、typeof(ICommand)、typeof(MyControlExample)、null);
公共ICommand命令
{
获取{return(ICommand)GetValue(CommandProperty);}
set{SetValue(CommandProperty,value);}
}
//i的Helper方法