Xamarin BindableProperty propertyChanged Delegate仅调用一次

时间:2018-05-15 20:40:47

标签: c# xamarin xamarin.forms

当我输入时,我意识到问题就在于这一行:

view.ShouldAnimate = value;

解决方案:(如果我错了请纠正我)

BindableProperties存储在字典中,键指向其值。在第一次调用我的propertyChanged委托时,我正在粉碎绑定值并将其替换为“value”。从那时起,我的代理人正在等待从值而不是我打算绑定的属性捕获通知。

我正在尝试做一个简单的动画,而有些bool是真的,但是,我显然误解了Xamarin中的可绑定属性实际上是如何工作的。这是代码:

    public static readonly BindableProperty ShouldAnimateProperty = BindableProperty.Create(
        "ShouldAnimate", typeof(bool), 
        typeof(UtilLayout), defaultValue: false, 
        propertyChanged: ShouldAnimateChanged);

    public bool ShouldAnimate
    {
        get => (bool)GetValue(ShouldAnimateProperty);
        set => SetValue(ShouldAnimateProperty, value);
    }

    private static void ShouldAnimateChanged(BindableObject bindable, object oldValue, object newValue)
    {
        var view = (UtilLayout)bindable;
        var value = (bool)newValue;
        view.ShouldAnimate = value;
        if (value)
        {
            view.AnimationComplete += view.OnAnimationComplete;
            view.AnimateIcon();
        }
        else
        {
            view.AnimationComplete -= view.OnAnimationComplete;
        }
    }

和XAML:

            <controls:UtilLayout x:Name="ulSync" 
                                 LabelText="Sync" 
                                 ImageFilePath="ic_sync_orange_48dp.png" 
                                 Tapped="SyncButtonClicked" 
                                 ShouldAnimate="{Binding SyncInProgress}"/>

该应用程序可以打开我的主页。 MainPage然后推送登录模式页面。 “SyncInProgress”是MainPage视图模型的属性。 “ShouldAnimateChanged”只被称为ONCE,并且设置为true。最初,在我的视图模型中,此SyncInProgress布尔值为false。因此,它似乎按预期发生。不幸的是,就是这样。 propertyChanged委托永远不会再被调用。

0 个答案:

没有答案