Xamarin BindableProperty propertyChanged Делегат вызывается только один раз - PullRequest
0 голосов
/ 15 мая 2018

Когда я печатал это, я понял, что проблема заключалась в этой строке:

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» только когда-либо называется ОДИН РАЗ и имеет значение true. Первоначально этот логический SyncInProgress является ложным в моей модели представления. Таким образом, это происходит, как и ожидалось. Вот и все, к сожалению. Делегат propertyChanged больше не вызывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...