Szukaj…


Parametry

Parametr Detale
wartość Wartość do konwersji
targetType Typ jest konwertowany na
parametr Opcjonalna wartość kontrolująca działanie konwersji
kultura Obiekt CultureInfo - wymagany, jeśli wymagana jest lokalizacja

Uwagi

Metoda Convert konwertuje wartość ze źródła (zwykle model widoku) na cel (zwykle właściwość formantu).

Metoda ConvertBack konwertuje wartość z celu z powrotem na źródło. Jest to potrzebne tylko wtedy, gdy powiązanie to TwoWay lub OneWayToSource .

Gdy ConvertBack nie jest obsługiwany, tj. Nie ma mapowania jeden na jeden między wartością przed konwersją a wartością po konwersji, powszechną praktyką jest ConvertBack metodę ConvertBack DependencyProperty.UnsetValue . Jest to lepsza opcja niż zgłoszenie wyjątku (np. NotImplementedException ), ponieważ pozwala uniknąć nieoczekiwanych błędów w czasie wykonywania. Również powiązania mogą korzystać z ich FallbackValue gdy obiekt DependencyProperty.UnsetValue jest zwracany przez konwerter.

Ciąg do konwertera IsChecked

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

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

Konwertery 101

Kontrolki XAML mogą mieć właściwości zależności, które można powiązać z obiektami z DataContext lub innych kontrolek. Gdy typ obiektu powiązanego jest inny niż typ docelowej właściwości DependencyProperty , można zastosować konwerter, aby dostosować jeden typ do drugiego.

Konwertery to klasy implementujące System.Windows.Data.IValueConverter lub System.Windows.Data.IMultiValueConverter ; WPF implementuje niektóre niestandardowe konwertery, ale programiści mogą zobaczyć zastosowanie w niestandardowych implementacjach, jak to często bywa.

Aby użyć konwertera w XAML, instancję można utworzyć w sekcji Resources . W poniższym przykładzie użyto System.Windows.Controls.BooleanToVisibilityConverter :

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

Zwróć uwagę na zdefiniowany element x:Key , który jest następnie używany w odniesieniu do wystąpienia BooleanToVisibilityConverter w powiązaniu:

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

W powyższym przykładzie wartość logiczna IsVisible jest konwertowana na wartość wyliczenia System.Windows.Visibility ; Visibility.Visible jeśli jest prawdą, lub Visibility.Collapsed . Visibility.Collapsed inny sposób.

Tworzenie i używanie konwertera: BooleanToVisibilityConverter i InvertibleBooleanToVisibilityConverter

Aby rozszerzyć i rozszerzyć doświadczenie wiązania, mamy konwertery do konwersji jednej wartości jednego typu na inną wartość innego typu. Aby wykorzystać konwertery w wiązaniu danych, najpierw musisz utworzyć klasę DataConverter, która rozszerza oba

  • IValueConverter (WPF i UWP)

lub

  • IMultiValueConverter (WPF)

jeśli chcesz przekonwertować wiele typów na jeden typ
W tym przypadku skupiamy się na przekształceniu wartości boolean True/False na odpowiadające Widoczności Visibility.Visible i Visibility.Collapsed Podsumowano:

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

Convert metoda jest wywoływana przy każdym GET dane FROM w ViewModel .
ConvertBack jest wezwany SET ing danych TO z ViewModel dla BindingMode.TwoWay wiązań.

Oczywiście możesz również wykorzystać właściwości swojego konwertera. Spójrz na to:

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

Jeśli chcesz użyć konwertera w Binding , po prostu zadeklaruj go jako zasób na swojej stronie, w oknie lub innym elemencie, podaj mu klucz i podaj potencjalnie potrzebne właściwości:

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

i użyj go jako StaticResource w powiązaniu:

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow