2010-10-20 3 views
4

J'essaye de maintenir le code de quelqu'un d'autre maintenant où cette personne est un expert de WPF. Moi, d'un autre côté, je ne le suis pas. :)WPF IValueConverter - convertir plusieurs valeurs en une seule valeur

Le code utilise IValueConverter pour convertir une énumération d'état en un booléen qui détermine si un UserControl est affiché ou non sur l'écran.

J'ai découvert une lacune qu'une seule énumération dans cette circonstance ne suffit pas, il y a en fait un autre booléen qui doit être considéré aussi bien. Y a-t-il un autre objet qui pourrait prendre deux éléments en argument pour faire une conversion? (Le paramètre "convertisseur" est déjà utilisé.)

Un exemple rapide serait le suivant.

La logique du code existant dit ...

If it's sunny, go to work. 
If it's raining, don't go to work. 

Je dois prendre une autre chose en compte ce qui en ferait comme suit.

If it's sunny and you're wearing pants, go to work. 
If it's sunny and you're not wearing pants, don't go to work. 
If it's raining and you're wearing pants, don't go to work. 
If it's raining and you're not wearing pants, don't go to work. 

IValueConverter, qui effectue la conversion me permet seulement de prendre une "chose" dans la conversion.

Toute aide est appréciée. Merci,

mj

Répondre

14

Utilisez un IMultiValueConverter

public class MyMultiValueConverter: IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     // Do something with the values array. It will contain your parameters 
    } 

    public object[] ConvertBack(object values, Type[] targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Vous devez également utiliser un MultiBinding dans le XAML au lieu d'une fixation régulière

<MultiBinding Converter="{StaticResource MyMultiValueConverterKey}"> 
    <Binding Path="Value1" /> 
    <Binding Path="Value2" /> 
</MultiBinding> 
+0

Merci! J'essaye en ce moment. mj –

+0

J'ai une question. Comment puis-je activer/désactiver un bouton basé sur des valeurs non vides de deux zones de texte sur une page? Je peux utiliser des styles, IMultivalueConvertor mais que faire si le nombre de zones de texte continue à changer/augmenter. Y at-il un moyen de surveiller dynamiquement pour vérifier le comportement du bouton? Voulez-vous que je pose une question distincte pour cela? – Vikram

+1

@Vikram Une question distincte serait la meilleure. Il est fort probable que vous souhaitiez configurer votre CanExecuteCommand afin qu'il vérifie la valeur de tous les champs liés et renvoie uniquement vrai s'ils ont tous une valeur. – Rachel

Questions connexes