如何绑定到 XAML 中的自定义事件处理程序

问题描述

我在弄清楚如何从我的 XAML 而不是我的代码正确绑定自定义事件处理程序时遇到了一些困难。在我后面的代码中,我现在在我的父代码后面有这个:

this.stepBar.Callback = SetViewForStep;

这很好用,它会在我的自定义控件中正确设置回调事件处理程序,其定义如下:

public static readonly BindableProperty CallbackProperty = BindableProperty.Create(nameof(Callback),typeof(EventHandler),typeof(StepProgressBarControl),null);

public EventHandler Callback {
            get {
                return (EventHandler)GetValue(CallbackProperty);
            } set {
                SetValue(CallbackProperty,value);
            }
        }

但是,我希望能够像在按钮上定义 Click 事件一样,完全在 XAML 中定义它。

<StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
                     Padding="20" Spacing="20">
            <customcontrols:StepProgressBarControl 
                StepColor="LightPink" 
                Steps="5" 
                Callback="SetViewForStep"
                StepSelected="{Binding SelectedStep}" x:Name="stepBar" />
            <Label
               Text="{Binding SelectedStep,StringFormat='The Step Selected is {0}'}"
               FontAttributes="Bold"
               FontSize="Large"
               HorizontalOptions="Center"
               VerticalOptions="CenterandExpand" />
        </StackLayout>

但是,如果我在 XAML 中定义它并尝试运行它,我会收到 Error XFC0009 No property,BindableProperty,or event found for "Callback",or mismatching type between value and property.

的编译错误

如何创建一个 EventHandler 以便我可以在我的 xaml.cs 中定义其函数,就像为按钮或任何其他具有公开 EventHandler 属性的内置控件定义单击事件的方式相同?

解决方法

Callback 声明为 event 应该可以解决问题。

更改自定义控件中的代码,如下所示

 public event EventHandler Callback;

这样当我们在 xaml 中输入 Callback 时,intellisense 帮助我们引用 page 中的方法。

enter image description here