MvvmCross Xamarin.Android FloatingActionButton 切换可见性



这是我的浮动动作按钮:

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab_add_retailer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:tint="@android:color/white"
        app:backgroundTint="@color/colorPrimary"
        app:srcCompat="@drawable/ic_add_black_24dp"
        local:MvxBind="Visibility IsAddButtonVisible, Converter=Visibility" />

它的可见性属性通过 MvvmCross 绑定到 IsAddButtonVisible:

private bool _isAddButtonVisible = true;
public bool IsAddButtonVisible
{
    get
    {
        return _isAddButtonVisible;
    }
    set
    {
        _isAddButtonVisible = value;
        RaisePropertyChanged(() => IsAddButtonVisible);
    }
}

当我更改布尔值时

ViewModel.IsAddButtonVisible = false;

。什么也没发生。我在这里做错了什么?提前感谢!

编辑:当我使用可见绑定时,切换有效

local:MvxBind="Visible IsAddButtonVisible"

但现在我在浮动动作按钮上看不到任何隐藏/显示动画......

您必须使用自定义绑定才能使用方法调用而不是Visibility ViewStates更改。


创建目标绑定,该绑定基于绑定到的 bool 值处理执行 show 和 hide 方法调用。

public class FloatingActionButtonAnimateVisibleTargetBinding
    : MvxAndroidTargetBinding
{
    protected FloatingActionButton View => (FloatingActionButton)Target;
    public FloatingActionButtonAnimateVisibleTargetBinding(FloatingActionButton target)
        : base(target)
    {
    }
    public override Type TargetType => typeof(bool);
    protected override void SetValueImpl(object target, object value)
    {
        var isVisible = value.ConvertToBoolean();
        var floatingActionButton = target as FloatingActionButton;
        if (isVisible)
            floatingActionButton.Show();
        else
            floatingActionButton.Hide();
    }

}

在平台Setup.cs中注册自定义绑定

protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry)
{
    base.FillTargetFactories(registry);
    registry.RegisterCustomBindingFactory<FloatingActionButton>(
        "VisibleAnim",
        button => new FloatingActionButtonAnimateVisibleTargetBinding(button));
}

然后,您应该能够在 XML 中使用绑定

local:MvxBind="VisibleAnim IsAddButtonVisible"

最新更新