2013-02-17 5 views
0

J'ai une liste d'objets que je lie à l'écran. L'une des propriétés est isPurchased. C'est un type booléen.Comment implémenter un convertisseur

Je n'ai pas beaucoup d'expérience avec les convertisseurs, donc je trouve cela un peu difficile. J'ai 2 questions.

La première question concerne la syntaxe. J'ai copié cet exemple de here.

public class purchasedConverter : IValueConverter 
    { 
     public object Convert(inAppPurchases value, Type targetType, object parameter, string language) 
     { 
      return; 
     } 
    } 

Si le isPurchased == true j'aimerais définir la couleur de fond à mon StackPanel à une couleur différente. J'ai changé object value en inAppPurchases value sur la méthode Convert. Cependant, peu importe ce que j'ai essayé je ne pouvais pas obtenir une référence à un arrière-plan.

Je pense que je veux return Background="somecolor"

Ma 2ème question (en supposant que je peux faire la 1ère partie), est que je utilise StandardStyles.xaml qui vient avec les projets Microsoft WinRT donc mon convertisseur aurait-il exister.

<StackPanel Grid.Column="1" VerticalAlignment="Top" 
Background="CornflowerBlue" Orientation="Vertical" Height="130" 
Margin="0,0,5,0"/> 

Cependant, comme je l'ai dit que je l'ai essayé cela avant, mais je ne suis pas en mesure de comprendre comment ajouter le convertir à mon dossier XAML. Où devrais-je référencer le convertisseur? Est-ce sur le StandardStyls.xaml ou le .xaml principal que je regarde?

Toute aide est appréciée.

+0

Vous savez que vous vous posez des questions sur une [liaison de données] convertisseur] (http://msdn.microsoft.com/en-us/library/system.windows.data.binding.converter.aspx)? – Clemens

+0

J'essaie juste de me familiariser avec les convertisseurs. Je ne savais pas que je demandais un convertisseur de liaison de données. Avez-vous des références entre les différents types? – webdad3

+0

Dans le convertisseur, vous transtypiez le paramètre "object value" transmis au type réel de l'objet binding * source * et renvoyez un objet pouvant être affecté au type binding * target *. Mais tout cela n'a de sens que si vous avez réellement un lien quelque part. – Clemens

Répondre

2

Background propriété de StackPanel est le type de Brush (Panel.Background msdn), afin que nous puissions retourner objet de type SolidColorBrush de méthode Convert.

Votre convertisseur devrait ressembler à ceci:

class PurchasedConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     // isPurchased is bool so we can cast it to bool 
     if ((bool)value == true) 
      return new SolidColorBrush(Colors.Red); 
     else 
      return new SolidColorBrush(Colors.Orange); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Ensuite, vous devez créer une instance de ce convertisseur en XAML:

<Window.Resources> 
    <con:PurchasedConverter x:Key="pCon" /> 
</Window.Resources> 

Et vous pouvez maintenant utiliser ce convertisseur pour lier Background propriété à StackPanel:

<StackPanel VerticalAlignment="Top" Orientation="Vertical" Height="130" 
     Background="{Binding isPurchased, Converter={StaticResource pCon}}" 
     Margin="0,0,5,0" >    
</StackPanel> 
+0

Merci c'est exactement ce dont j'avais besoin. J'ai sorti le datatemplate que j'utilisais du standardstyles.xaml et je l'ai mis dans la page avec laquelle je travaille et tout a parfaitement fonctionné. – webdad3

Questions connexes