Convertisseur Avec Plusieurs Paramètres

Est-ce que quelqu'un sait comment utiliser converter avec plusieurs paramètres dans une Application Windows Phone 7?

Merci d'avance.

22
demandé sur Gone Coding 2012-07-04 09:56:48

2 réponses

Les Convertisseurs implémentent toujours IValueConverter . Que signifie l'appel de Convertir ou ConvertBack passe un unique paramètre supplémentaire. Ce paramètre est extrait du XAML.

Comme le suggère Hitesh Patel, rien ne vous empêche de mettre plus d'une valeur dans le paramètre, tant que vous avez un délimiteur pour les séparer plus tard, mais vous ne pouvez pas utiliser une virgule car cela délimite le XAML!

Par exemple.

XAML

<TextBlock Text="{Binding Path=ReleaseDate, Mode=OneWay,
                        Converter={StaticResource MyConverter}, 
                        ConverterParameter=Param1|Param2}}" />

Convertisseur

public object Convert(object value, Type targetType, object parameter,
    System.Globalization.CultureInfo culture)
{
    string parameterString = parameter as string;
    if (!string.IsNullOrEmpty(parameterString))
    {
        string[] parameters = parameterString.Split(new char[]{'|'});
        // Now do something with the parameters
    }
}

notez que je ne l'ai pas vérifié pour voir si un caractère "|" Pipe est valide dans XAML (devrait l'être), mais sinon choisissez un autre caractère qui ne s'oppose pas.

Les versions ultérieures de. Net ne nécessitent pas de tableau de caractères pour la version la plus simple de Split, vous pouvez donc l'utiliser à la place:

string[] parameters = parameterString.Split('|');

Additif:

Une astuce eBay utilisé pour utiliser dans les URL, il y a des années, était de délimiter les données dans L'URL avec QQ. Un double-Q Ne se produit pas naturellement dans les données de texte. Si jamais vous êtes bloqué pour un délimiteur de texte qui évitera les problèmes d'encodage, utilisez simplement QQ... Cela ne fonctionnera pas avec split (qui nécessite des caractères uniques, mais agréable à savoir):)

40
répondu Gone Coding 2016-10-25 08:27:16

Vous pouvez toujours dériver de la classe DependecyObject et ajouter autant de DependencyProperties que vous le souhaitez. Par exemple:

ExampleConverter.cs

public class ExampleConverter : DependencyObject, IValueConverter
{
    public string Example
    {
        get => GetValue(ExampleProperty).ToString();
        set => SetValue(ExampleProperty, value);
    }
    public static readonly DependencyProperty ExampleProperty =
        DependencyProperty.Register("Example", typeof(string), typeof(ExampleConverter), new PropertyMetadata(null));

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        //Do the convert
    }

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

Puis en XAML:

ExampleView.xaml

<ResourceDictionary>
    <converters:ExampleConverter x:Key="ExampleConverter" Example="{Binding YourSecondParam}"/>
</ResourceDictionary>
...
<TextBlock Text="{Binding Path=ReleaseDate, Mode=OneWay,
                    Converter={StaticResource ExampleConverter}, 
                    ConverterParameter={Binding YourFirstParam}}" />
8
répondu Kamil Stadryniak 2017-09-18 11:33:20