xaml
Convertisseurs
Recherche…
Paramètres
| Paramètre | Détails |
|---|---|
| valeur | La valeur à convertir de |
| targetType | Le type en cours de conversion en |
| paramètre | Valeur facultative pour contrôler le fonctionnement de la conversion |
| Culture | Objet CultureInfo - requis si la localisation est nécessaire |
Remarques
La méthode Convert convertit la valeur de la source (généralement le modèle de vue) en cible (généralement une propriété d'un contrôle).
La méthode ConvertBack convertit la valeur de la cible vers la source. Il n'est nécessaire que si la liaison est TwoWay ou OneWayToSource .
Lorsqu'un ConvertBack n'est pas pris en charge, c'est-à-dire qu'il n'y a pas de correspondance ConvertBack entre la valeur de pré-conversion et la valeur de post-conversion, il est courant que la méthode ConvertBack renvoie DependencyProperty.UnsetValue . C'est une meilleure option que de lancer une exception (par exemple, NotImplementedException ) car elle évite les erreurs d'exécution inattendues. En outre, les liaisons peuvent bénéficier de leur FallbackValue lorsque DependencyProperty.UnsetValue est renvoyé par un convertisseur.
Chaîne au convertisseur IsChecked
Dans XAML:
<RadioButton IsChecked="{Binding EntityValue, Mode=TwoWay,
Converter={StaticResource StringToIsCheckedConverter},
ConverterParameter=Male}"
Content="Male"/>
<RadioButton IsChecked="{Binding EntityValue, Mode=TwoWay,
Converter={StaticResource StringToIsCheckedConverter},
ConverterParameter=Female}"
Content="Female"/>
La classe C #:
public class StringToIsCheckedConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string input = (string)value;
string test = (string)parameter;
return input == test;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null || !(value is bool))
{
return string.Empty;
}
if (parameter == null || !(parameter is string))
{
return string.Empty;
}
if ((bool)value)
{
return parameter.ToString();
}
else
{
return string.Empty;
}
}
}
Convertisseurs 101
Les contrôles XAML peuvent avoir des propriétés de dépendance pouvant être liées à des objets à partir de DataContext ou d'autres contrôles. Lorsque le type de l'objet lié est différent du type de l'objet DependencyProperty cible, un convertisseur peut être utilisé pour adapter un type à un autre.
Les convertisseurs sont des classes implémentant System.Windows.Data.IValueConverter ou System.Windows.Data.IMultiValueConverter ; WPF implémente certains convertisseurs prêts à l'emploi, mais les développeurs peuvent les utiliser dans des implémentations personnalisées, comme c'est souvent le cas.
Pour utiliser un convertisseur dans XAML, une instance peut être instanciée dans la section Resources . Pour l'exemple ci-dessous, System.Windows.Controls.BooleanToVisibilityConverter sera utilisé:
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</UserControl.Resources>
Notez l'élément x:Key défini, qui est ensuite utilisé pour référencer l'instance de BooleanToVisibilityConverter dans la liaison:
<TextBlock Text="This will be hidden if property 'IsVisible' is true"
Visibility="{Binding IsVisible,
Converter={StaticResource BooleanToVisibilityConverter}}"/>
Dans l'exemple ci-dessus, une propriété booléenne IsVisible est convertie en une valeur de l'énumération System.Windows.Visibility ; Visibility.Visible si vrai ou Visibility.Collapsed sinon.
Création et utilisation d'un convertisseur: BooleanToVisibilityConverter et InvertibleBooleanToVisibilityConverter
Pour étendre et développer l'expérience de liaison, nous avons des convertisseurs pour convertir une valeur d'un type en une autre valeur d'un autre type. Pour tirer parti des convertisseurs dans une liaison de données, vous devez d'abord créer une classe DataConverter
-
IValueConverter(WPF & UWP)
ou
-
IMultiValueConverter(WPF)
si vous voulez convertir plusieurs types en un seul type
Dans ce cas, nous nous concentrons sur la conversion d’une valeur boolean True/False en une visibilité Visibility.Visible et Visibility.Collapsed :
public class BooleanToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return (value is bool && (bool) value) ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return (value is Visibility && (Visibility) value == Visibility.Visible);
}
}
La méthode Convert est appelée à chaque fois que vous GET données à FROM ViewModel .
Le ConvertBack est appelé SET ing données TO la ViewModel pour BindingMode.TwoWay fixations.
public class InvertibleBooleanToVisibilityConverter : IValueConverter
{
public bool Invert { get; set; } = false;
public object Convert(object value, Type targetType, object parameter, string language)
{
return (value is bool && (bool) value != Invert) ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return (value is Visibility && ((Visibility) value == Visibility.Visible) != Invert);
}
}
Si vous souhaitez utiliser un convertisseur dans une Binding , déclarez-le simplement comme une ressource dans votre page, fenêtre ou autre élément, donnez-lui une clé et fournissez les propriétés potentiellement nécessaires:
<Page ...
xmlns:converters="using:MyNamespce.Converters">
<Page.Resources>
<converters:InvertibleBooleanToVisibilityConverter
x:Key="BooleanToVisibilityConverter"
Invert="False" />
</Page.Resources>
et l'utiliser comme un StaticResource dans une liaison:
<ProgressRing
Visibility="{Binding ShowBusyIndicator,
Converter={StaticResource BooleanToVisibilityConverter},
UpdateSourceTrigger=PropertyChanged,
Mode=OneWay}" />