2017-05-12 3 views
1

Ceci est mon FloatingActionButton:MvvmCross Xamarin.Android FloatingActionButton visibilité bascule

<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" /> 

Sa propriété de visibilité est lié par MvvmCross à IsAddButtonVisible:

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

Quand je change la valeur booléenne

ViewModel.IsAddButtonVisible = false; 

... rien ne se passe. Qu'est-ce que je fais mal ici? Merci d'avance!

Edit: quand je lie l'aide visible, le basculement fonctionne

local:MvxBind="Visible IsAddButtonVisible" 

mais maintenant je ne peux pas voir tout cacher/afficher les animations sur le FloatingActionButton ...

+1

Y at-il chose dans votre sortie, "Impossible de créer une liaison cible pour la visibilité de liaison ..."? Quel est le réglage de votre éditeur de liens? Vu que vous utilisez un type booléen, vous pouvez utiliser l'option de liaison personnalisée 'Visible' Mvx' locale: MvxBind = "Visible IsAddButtonVisible" '. – Plac3Hold3r

+0

@ Plac3Hold3r Merci! Je ne vois rien dans ma sortie, du moins pas où je vois habituellement des erreurs de liaison. Oh, quand j'utilise local: MvxBind = "Visible IsAddButtonVisible", le toggling fonctionne :) Mais je ne vois pas les animations habituelles sur le bouton. Il apparaît juste et disparaît. Si j'appelle hide() et show() manuellement, je peux voir les animations, donc je pense avoir correctement configuré le bouton. Une idée de comment obtenir ces animations? –

+0

Intéressant que vous n'ayez aucun problème avec la liaison 'Visible' mais que la liaison' Visibility' se casse sans erreur. Par curiosité, quels sont les paramètres de votre éditeur de liens lors de la construction? – Plac3Hold3r

Répondre

3

Vous auriez à utiliser une liaison personnalisée pour utiliser les appels de méthode au lieu des modifications VisibilityViewStates.


Créer la cible de liaison qui gère l'exécution des appels de méthode afficher et masquer en fonction de la valeur bool vous liez à.

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(); 
    } 

}

enregistrer la liaison personnalisée dans votre plate-forme Setup.cs

protected override void FillTargetFactories(IMvxTargetBindingFactoryRegistry registry) 
{ 
    base.FillTargetFactories(registry); 

    registry.RegisterCustomBindingFactory<FloatingActionButton>(
     "VisibleAnim", 
     button => new FloatingActionButtonAnimateVisibleTargetBinding(button)); 
} 

Ensuite, vous devriez être en mesure d'utiliser la liaison dans votre XML

local:MvxBind="VisibleAnim IsAddButtonVisible" 
+0

Incroyable, cela a fonctionné.J'avais regardé des classeurs faits sur commande mais j'ai juste commencé à employer MvvmCross depuis hier, je ne pourrais pas comprendre cela dehors :) –

+0

Oui. C'est l'une des fonctionnalités intéressantes de MvvmCross. Dans la boîte, il fait beaucoup de choses, mais il a aussi des crochets qui vous permettent de faire des choses plus avancées directement avec les API natives. – Kiliman