簡體   English   中英

MvvmCross Xamarin.Android FloatingActionButton切換可見性

[英]MvvmCross Xamarin.Android FloatingActionButton toggle visibility

這是我的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;

...什么都沒發生。 我在這做錯了什么? 提前致謝!

編輯:當我使用Visible綁定時,切換工作

local:MvxBind="Visible IsAddButtonVisible"

但現在我在FloatingActionButton上看不到任何隱藏/顯示動畫......

您必須使用自定義綁定來使用方法調用而不是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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM