2017-05-22 1 views
0

J'ai une vue liste établie avec la source d'élément comme enfant. Je veux lier un objet enfant à une vue qui va définir la couleur à travers le convertisseur.forme Xamarin: IValueConverter recevoir valeur NULL dans la méthode Convert

La méthode de conversion obtenu appelé mais la valeur je suis passé était null.

En dehors du point, j'utilise également Path=/ mais la valeur transmise au convertisseur reste null. Si je lie la propriété, c'est bien mais pas l'élément actuel.

<ListView x:Name="childListView" 
    VerticalOptions="FillAndExpand" 
    HasUnevenRows="true" 
    ItemSelected="OnItemSelected" 
    ItemTapped="OnItemTapped"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <ViewCell> 
       <ViewCell.View> 
        <StackLayout 
         BackgroundColor="{Binding ., Converter={StaticResource accountedToColorConverter}}" 
         Spacing="0" Padding="0" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand"> 
         <StackLayout Orientation="Horizontal" Spacing="10" Padding="0" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"> 
          <StackLayout Orientation="Horizontal" HorizontalOptions="StartAndExpand"> 
           <controls:CircleImage> 
+0

Qu'est-ce que "." signifie dans votre code dans la liaison de la propriété 'BackgroundColor'? Si vous montrez le code derrière de cette XAML, il pourrait être plus facile de savoir – apineda

+0

En XAML, convertisseurs de valeur sont généralement instanciées dans un 'ResourceDictionary' puis référencé dans une expression de liaison en utilisant l'extension de balisage' StaticResource'. svp fournir le code connexe afin d'obtenir de l'aide. – Fahadsk

+0

Le "." J'ai utilisé était utilisé dans mon autre code que j'ai un groupe de liaison dans la liste, dans ce groupe, j'ai une chaîne, et un autre groupe d'objets. Le "." représente l'élément actuel dans la liste. J'ai utilisé cela dans le sélecteur de modèle au lieu de l'utiliser sur IValueConverter. – LittleFunny

Répondre

1

Phatye est certainement raison de dire la ligne

BackgroundColor="{Binding ., Converter={StaticResource accountedToColorConverter}}"

est le coupable. Moi aussi, je l'ai tenté d'utiliser le {Binding .} et {Binding Path=.} avec un convertisseur dans le passé que pour courir dans les mêmes problèmes de référence null que vous exécutez dans. Il semble que Xamarin n'aime pas ça.

La bonne solution sera de passer le bon chemin de la propriété que vous souhaitez lier:

En supposant que la propriété est une propriété de niveau supérieur

BackgroundColor="{Binding Path=accounted, Converter={StaticResource accountedToColorConverter}}"

Sinon, vous pouvez le faire:

BackgroundColor="{Binding Path=topLevelProperty.accounted, Converter={StaticResource accountedToColorConverter}}"

0
BackgroundColor="{Binding ., Converter={StaticResource accountedToColorConverter}}" 

Cette ligne est le coupable probable. Il ne sera valide que si le contexte de liaison de la page est cette seule propriété "AccountedTo". Changez-le en "{Binding BackgroundProperty}" où "BackgroundProperty" est la valeur "AccountedTo".