xamarin MAUI如何使用BindingPropertyChangedDelegate?

kkih6yb8  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(78)

我有一个BindableProperty,我需要在值更改时做一些事情。到目前为止,我得到了这个:

public static readonly BindableProperty IsActiveLinkProperty =
    BindableProperty.Create(nameof(IsActiveLink), typeof(bool), typeof(LinkStackLayout), false);

public bool IsActiveLink
{
    get => (bool)GetValue(IsActiveLinkProperty);
    set => SetValue(IsActiveLinkProperty, value);
}

我了解到使用BindingPropertyChangedDelegate通知我的属性IsActiveLink的更改,我正在尝试实现它。我不能得到它的权利,我不知道如何写它是工作。如果能得到帮助就太好了。
最后一次尝试:(error在第一行,“unexpected token”)

BindableProperty.BindingPropertyChangedDelegate<bool>(BindableObject bindable, bool oldValue, bool newValue);

public static readonly BindableProperty IsActiveLinkProperty =
    BindableProperty.Create(nameof(IsActiveLink), typeof(bool), typeof(LinkStackLayout), false, BindingMode.TwoWay, propertyChanged: (b, o, n) =>
    {
        var lsl = (LinkStackLayout)b;
        lsl.DoStuff(n);
    });

public bool IsActiveLink
{
    get => (bool)GetValue(IsActiveLinkProperty);
    set => SetValue(IsActiveLinkProperty, value);
}

public void DoStuff()
{
    var icon = IsActiveLink ? CursorIconEnum.Hand : CursorIconEnum.Arrow;
    this.SetCustomCursor(icon, Handler?.MauiContext);
}
qvk1mo1f

qvk1mo1f1#

基于你的代码,我会这样做(没有测试,但我假设你知道更多关于你想要什么的信息):

public static readonly BindableProperty IsActiveLinkProperty =
BindableProperty.Create(nameof(IsActiveLink), typeof(bool), typeof(LinkStackLayout), false, propertyChanged: DoStuff);

private static void DoStuff(BindableObject bindable, object oldValue, object newValue)
{
    var linkStackLayout = (LinkStackLayout)bindable;
    var icon = (bool) newValue ? CursorIconEnum.Hand : CursorIconEnum.Arrow;
    linkStackLayout.SetCustomCursor(icon, linkStackLayout.Handler?.MauiContext);
}

public bool IsActiveLink
{
    get => (bool)GetValue(IsActiveLinkProperty);
    set => SetValue(IsActiveLinkProperty, value);
}

相关问题