Xamarin.forms Xamarin布尔可绑定属性

Xamarin.forms Xamarin布尔可绑定属性,xamarin.forms,Xamarin.forms,我试图使可点击的图标,将用于愿望列表,为此我创建了布尔属性,将返回图像 这是我的代码,但它不支持onClick事件,请建议解决此问题 public class WishIconImg : Image, IDisposable { static FontImageSource unselected_source = new FontImageSource(); static FontImageSource selected_source = new F

我试图使可点击的图标,将用于愿望列表,为此我创建了布尔属性,将返回图像

这是我的代码,但它不支持onClick事件,请建议解决此问题

  public class WishIconImg : Image, IDisposable
    {

        static FontImageSource unselected_source = new FontImageSource();
        static FontImageSource selected_source = new FontImageSource();

        public WishIconImg()
        {
            unselected_source.FontFamily = "FA-S";
            unselected_source.Glyph = "\U000f02d5";
            unselected_source.Color = Color.DarkOrange;

            selected_source.FontFamily = "FA-S";
            selected_source.Glyph = "\U000f02d1";
            selected_source.Color = Color.DarkOrange;



           OnClick += Checkbox_OnClick;

        }

        public static BindableProperty IsCheckedProperty = BindableProperty.Create(
            nameof(IsChecked), typeof(bool), typeof(WishIconImg), defaultBindingMode: BindingMode.TwoWay,
            propertyChanged: IsCheckedChanged);

        public bool IsChecked
        {
            get { return (bool)GetValue(IsCheckedProperty); }
            set { SetValue(IsCheckedProperty, value); }
        }

        private static void IsCheckedChanged(BindableObject bindable, object oldValue, object newValue)
        {

            var cb = (WishIconImg)bindable;
            if (cb == null)
                return;

            if ((bool)newValue)
            {
                cb.Source = selected_source;
            }
            else
            {
                cb.Source=unselected_source ;
            }



        }

       void Checkbox_OnClick(object sender, EventArgs e)
        {
            IsChecked = !IsChecked;

        }

        public void Dispose()
        {
            OnClick -= Checkbox_OnClick;
        }



    }
}
Xaml



甚至我也尝试过使用Label属性,但它不起作用

尝试为单击事件添加
TapGestureRecognizer

做这样的事

<StackLayout HeightRequest="35" WidthRequest="35"  HorizontalOptions="End">
    <controls:WishIconImg   x:Name="HeartChk" IsChecked="{Binding AddWish, Mode=TwoWay}" />
    <StackLayout.GestureRecognizers>
          <TapGestureRecognizer Command="{Binding Checkbox_OnClick}" /> 
    </StackLayout.GestureRecognizers>
</StackLayout>
单击视图时,您的方法将调用复选框


尝试为单击事件添加
TapGestureRecognitor

做这样的事

<StackLayout HeightRequest="35" WidthRequest="35"  HorizontalOptions="End">
    <controls:WishIconImg   x:Name="HeartChk" IsChecked="{Binding AddWish, Mode=TwoWay}" />
    <StackLayout.GestureRecognizers>
          <TapGestureRecognizer Command="{Binding Checkbox_OnClick}" /> 
    </StackLayout.GestureRecognizers>
</StackLayout>
单击视图时,您的方法将调用复选框


您可以像下面这样修改该类

public WishIconImg()
        {
            unselected_source.FontFamily = "FA-S";
            unselected_source.Glyph = "\U000f02d5";
            unselected_source.Color = Color.DarkOrange;

            selected_source.FontFamily = "FA-S";
            selected_source.Glyph = "\U000f02d1";
            selected_source.Color = Color.DarkOrange;

            var tapGestureRecognizer = new TapGestureRecognizer();
            tapGestureRecognizer.Tapped += (s, e) => {
                // handle the tap

                IsChecked = !IsChecked;

            };
            this.GestureRecognizers.Add(tapGestureRecognizer);



        }

您可以像下面这样修改该类

public WishIconImg()
        {
            unselected_source.FontFamily = "FA-S";
            unselected_source.Glyph = "\U000f02d5";
            unselected_source.Color = Color.DarkOrange;

            selected_source.FontFamily = "FA-S";
            selected_source.Glyph = "\U000f02d1";
            selected_source.Color = Color.DarkOrange;

            var tapGestureRecognizer = new TapGestureRecognizer();
            tapGestureRecognizer.Tapped += (s, e) => {
                // handle the tap

                IsChecked = !IsChecked;

            };
            this.GestureRecognizers.Add(tapGestureRecognizer);



        }

你也可以发布UI的xaml代码吗?我为您提供了一个更好的解决方案,我将使用更好的解决方案编辑您的UI如果您只想在添加xaml时添加OnClick事件,我只是在xaml中调用此控件,您也可以为UI发布xaml代码吗?我为您提供了一个更好的解决方案,我将使用更好的解决方案编辑您的UI如果您只想在添加了XAML的情况下添加OnClick事件,我只是在XAML中调用此控件您为他们导入了什么包?如果我按照您的示例更改代码,TapGestureRecognitzer命令=“{Binding Checkbox_OnClick}”/>将显示错误,我应该在控件中还是在ViewModel中创建复选框?在视图模型中,但如果您的问题已经解决,您可以出于将来的目的尝试…在任何布局上添加单击您为其导入的包?如果我按照您的示例更改代码,则TapGestureRecognizer命令=“{Binding Checkbox\u OnClick}”/>将显示错误,我应该在控件中还是在视图模型中创建复选框?在视图模型中,但是如果您的问题已经解决,您可以在将来尝试使用它…要添加任何布局,请单击“帮助”,问题现在就消失了。感谢一个非常好的编码。如果您需要处理ViewModel中的逻辑,还可以使用命令而不是事件。检查。谢谢你的帮助,问题已经解决了。感谢一个非常好的编码。如果您需要处理ViewModel中的逻辑,还可以使用命令而不是事件。检查。