Suche…


Parameter

Parameter Einzelheiten
Wert Der Wert, aus dem konvertiert werden soll
targetType Der Typ, in den konvertiert wird
Parameter Optionaler Wert zur Steuerung der Konvertierung
Kultur CultureInfo-Objekt - erforderlich, wenn die Lokalisierung erforderlich ist

Bemerkungen

Die Convert Methode konvertiert den Wert von der Quelle (normalerweise das Ansichtsmodell) in das Ziel (normalerweise eine Eigenschaft eines Steuerelements).

Die ConvertBack Methode konvertiert den Wert vom Ziel zurück in die Quelle. Sie wird nur benötigt, wenn die Bindung TwoWay oder OneWayToSource .

Wenn ein ConvertBack nicht unterstützt wird, dh zwischen dem Wert vor der Konvertierung und dem Wert nach der Konvertierung keine Eins-zu-Eins-Zuordnung besteht, ist es üblich, dass die Methode ConvertBack DependencyProperty.UnsetValue ConvertBack . NotImplementedException ist eine bessere Option als das NotImplementedException einer Ausnahme (z. B. NotImplementedException ), da unerwartete Laufzeitfehler vermieden werden. Außerdem können Bindungen von FallbackValue profitieren, wenn DependencyProperty.UnsetValue von einem Konverter zurückgegeben wird.

Zeichenfolge an IsChecked Converter

In 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"/>

Die C # -Klasse:

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;
        }
    }
}

Konverter 101

XAML-Steuerelemente können Abhängigkeitseigenschaften aufweisen, die an Objekte von DataContext oder anderen Steuerelementen gebunden werden können. Wenn der Typ des gebundenen Objekts vom Typ der Ziel- DependencyProperty , kann ein Konverter verwendet werden, um einen Typ an einen anderen anzupassen.

Konverter sind Klassen, die System.Windows.Data.IValueConverter oder System.Windows.Data.IMultiValueConverter implementieren. WPF implementiert einige Standardkonverter. Entwickler können jedoch die Verwendung in benutzerdefinierten Implementierungen sehen, wie dies häufig der Fall ist.

Um einen Konverter in XAML zu verwenden, können Sie im Abschnitt Resources eine Instanz instanziieren. Für das folgende Beispiel wird System.Windows.Controls.BooleanToVisibilityConverter verwendet:

<UserControl.Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</UserControl.Resources>

Beachten Sie das definierte Element x:Key , mit dem auf die Instanz von BooleanToVisibilityConverter in der Bindung BooleanToVisibilityConverter :

<TextBlock Text="This will be hidden if property 'IsVisible' is true"
           Visibility="{Binding IsVisible, 
                                Converter={StaticResource BooleanToVisibilityConverter}}"/>

Im obigen Beispiel wird eine boolesche IsVisible Eigenschaft in einen Wert der System.Windows.Visibility Enumeration konvertiert. Visibility.Visible bei true oder Visibility.Collapsed ansonsten.

Erstellen und Verwenden eines Konverters: BooleanToVisibilityConverter und InvertibleBooleanToVisibilityConverter

Um die Bindungserfahrung zu erweitern und zu erweitern, verfügen wir über Konverter, um einen Wert eines Typs in einen anderen Wert eines anderen Typs zu konvertieren. Um Konverter in einer Datenverarbeitung zu nutzen, müssen Sie zuerst eine DataConverter-Klasse erstellen, die entweder die Erweiterung enthält

  • IValueConverter (WPF & UWP)

oder

  • IMultiValueConverter (WPF)

wenn Sie mehrere Typen in einen Typ konvertieren möchten
In diesem Fall konzentrieren wir uns auf die Konvertierung eines boolean True/False Werts in die entsprechenden Sichtbarkeiten Visibility.Visible und 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);
    }
}

Die Convert - Methode wird aufgerufen , wenn Sie GET - Daten FROM dem ViewModel .
Die ConvertBack wird aufgefordert , SET ing Daten TO das ViewModel für BindingMode.TwoWay Bindungen.

Natürlich können Sie auch Eigenschaften innerhalb Ihres Konverters nutzen. Schauen Sie sich dieses an:

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);
    }
}

Wenn Sie einen Konverter in einer Binding möchten, deklarieren Sie ihn einfach als Ressource in Ihrer Seite, Ihrem Fenster oder einem anderen Element.

<Page ...
    xmlns:converters="using:MyNamespce.Converters">
<Page.Resources>
    <converters:InvertibleBooleanToVisibilityConverter 
        x:Key="BooleanToVisibilityConverter" 
        Invert="False" />
</Page.Resources>

und verwenden Sie es als StaticResource in einer Bindung:

<ProgressRing 
        Visibility="{Binding ShowBusyIndicator, 
            Converter={StaticResource BooleanToVisibilityConverter},
            UpdateSourceTrigger=PropertyChanged,
            Mode=OneWay}" />


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow