2017-06-29 3 views
5

J'essaie de vérifier si une valeur d'objet de liaison est nulle dans Xamarin Forms XAML DataTrigger mais je n'arrive pas à le faire fonctionner. J'ai essayé ce qui suit:Comment vérifier la valeur nulle de l'objet dans le déclencheur de données de formulaires xamarin?

<StackLayout IsVisible="True"> 
    <StackLayout.Triggers> 
     <DataTrigger TargetType="StackLayout" 
         Binding="{Binding MyObject}" 
         Value="{x:Null}"> 
      <Setter Property="IsVisible" Value="False"></Setter> 
     </DataTrigger> 
    </StackLayout.Triggers> 

    ... 

</StackLayout> 

Est-ce que quelqu'un sait un moyen de le faire? Je l'ai testé uniquement sur Android.

Edit: J'ai déposé un rapport de bogue à Xamarin bugzilla https://bugzilla.xamarin.com/show_bug.cgi?id=57863

+0

Avez-vous des erreurs? Est-ce que les autres liaisons fonctionnent correctement, c'est-à-dire, est-ce que c'est vraiment en essayant de vérifier si c'est le problème? – spaceplane

+0

Je ne vois aucune erreur et oui les autres liaisons fonctionnent correctement. – hamalaiv

+0

Je viens de le tester et j'ai aussi le même problème ... ça peut être un bug de Xamarin. Une solution de contournement serait d'utiliser un convertisseur qui implémente IValueConverter? – spaceplane

Répondre

1

Vous pouvez utiliser le convertisseur et mettre à lui son travail pour moi. Essayons ci-dessous le code.

Convertisseur de code

public class NullValueBoolConverter: IValueConverter, IMarkupExtension 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 

      if (value is string) 
      { 
       if (string.IsNullOrEmpty(value as string)) 
       { 
        return false; 
       } 
       else 
       { 
        return true; 
       } 
      } 
      else 
      { 

       if (value == null) 
       { 
        return false; 
       } 
       else 
       { 
        return true; 
       } 
      } 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      return value; 
     } 

     public object ProvideValue(IServiceProvider serviceProvider) 
     { 
      return this; 
     } 
    } 

et se lient à la propriété IsVisible comme ci-dessous:

<StackLayout IsVisible="{Binding Registerclosure.Notes, Converter={Helpers:NullValueBoolConverter}}"> 
</StackLayout> 

Ne pas oublié en ligne ci-dessous tête

xmlns: = Helpers "clr-namespace: MyNameSpace"

0

C'est un bogue avec Xmarin Forms here

+0

Oui je l'ai déposé. J'ai modifié la question maintenant pour inclure le lien bugreport. – hamalaiv