2017-08-06 8 views
0

Qu'est-ce qui se passe:Comment passer deux entrées à un convertisseur de valeur dans Xamarin Android

  • Je passe une valeur booléenne à un convertisseur et effectuer une action (Changer Drawable).

Ce que je suis en train de faire:

  • Comment passer deux valeurs booléennes à un convertisseur et effectuer une action .
  • Est-ce possible? Comment?
  • Si ce n'est pas la bonne approche en passant deux entrées à un seul convertisseur de valeur, comment résoudre ce

CONVERTER: CruiseShipIndicatorValueConverter.cs

public class CruiseShipIndicatorValueConverter : MvxValueConverter<bool, int> 
    { 
     protected override int Convert(bool value, Type targetType, object parameter, CultureInfo culture) 
     { 
      if (value) 
      { 
       return Resource.Drawable.up_arrow; 
      } 
      else 
      { 
       return Resource.Drawable.down_arrow; 
      } 
     } 


     protected override bool ConvertBack(int value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return base.ConvertBack(value, targetType, parameter, culture); 
     } 

    } 

XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:local="http://schemas.android.com/apk/res-auto" 
    android:orientation="horizontal" 
    android:layout_width="wrap_content" 
    android:layout_height="35dp" 
    android:gravity="center" 
    android:layout_gravity="center" 
    android:padding="2dp"> 
    <MvxImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:layout_marginRight="2dp" 
     android:gravity="center" 
     android:layout_gravity="center" 
     local:MvxBind="DrawableId QuesSeriesIndicator(questionState)" /> 
</LinearLayout> 
+0

Voulez-vous un MultiValueConverter comme savoir par WPF? Jetez un oeil à https://github.com/Keboo/Xamarin.Forms.Proxy –

Répondre

0

Vous pouvez soit les deux encapsuler booléens à une classe ou d'utiliser Tuple. Une implémentation de classe exemple pour vous serait quelque chose comme ceci.

public class CruiseShipIndicatorValueConverter : MvxValueConverter<Tuple<bool, bool>, int> 

En savoir plus sur Tuples here.

+0

Merci, Comment passer la valeur au convertisseur en XML ** Puis-je essayer ceci: ** 'local: MvxBind =" DrawableId QuesSeriesIndicator (questionState1, questionState2) "' .... Où ... 'questionState1' et' questionState2' sont les deux entrées booléennes – Devrath

+0

@Devrath, avez-vous trouvé la solution pour cela? – androidStud

0

C'est très simple. Cela peut être facilement fait avec un convertisseur de valeur unique. Au lieu d'utiliser tuple ou tout autre type de données générique, nous pouvons le faire avec la définition de convertisseur existante.

Par exemple:

public class CruiseShipIndicatorValueConverter : MvxValueConverter<bool, int> 
{ 

    protected override int Convert(bool value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value) 
     { 
      return Resource.Drawable.up_arrow; 
     } 
     else 
     { 
      return Resource.Drawable.down_arrow; 
     } 

     if (parameter is bool) 
     { 
      bool value2 = (bool)parameter; 
      // Here this value2 is the second boolean value. 
     } 
    } 

    protected override bool ConvertBack(int value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return base.ConvertBack(value, targetType, parameter, culture); 
    } 

} 

où MvxValueConverter, bool (questionState1) est la "valeur" dans Convert et int est le type de retour dans Convert. Pour la deuxième valeur booléenne (questionState2), placez-le dans "parameter" comme objet type.

Pour la liaison, nous devons envoyer

local:MvxBind="DrawableId QuesSeriesIndicator(questionState1, questionState2)"