当我输入时,我意识到问题就在于这一行:
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委托永远不会再被调用。