Поиск…


параметры

параметр подробности
значение Значение для конвертации из
TargetType Тип, преобразованный в
параметр Необязательное значение для управления процессом преобразования
культура Объект CultureInfo - требуется, если требуется локализация

замечания

Метод Convert преобразует значение из источника (обычно модели представления) в цель (обычно это свойство элемента управления).

Метод ConvertBack преобразует значение из цели обратно в исходный код. Это необходимо, только если привязка - TwoWay или OneWayToSource .

Если ConvertBack не поддерживается, т. ConvertBack Между значением предварительного преобразования и значением после преобразования нет взаимно однозначного сопоставления, ConvertBack метод ConvertBack возвращающий DependencyProperty.UnsetValue . Это лучший вариант, чем исключение (например, NotImplementedException ), поскольку оно позволяет избежать непредвиденных ошибок времени выполнения. Кроме того, привязки могут извлечь выгоду из их FallbackValue когда DependencyProperty.UnsetValue возвращается конвертером.

Преобразование String в IsChecked

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

Класс 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;
        }
    }
}

Преобразователи 101

Элементы управления XAML могут иметь свойства зависимостей, которые могут быть привязаны к объектам из DataContext или других элементов управления. Когда тип связанного объекта отличается от типа целевого DependencyProperty , конвертер может использоваться для адаптации одного типа к другому.

Преобразователи - это классы, реализующие System.Windows.Data.IValueConverter или System.Windows.Data.IMultiValueConverter ; WPF реализует некоторые из готовых конвертеров, но разработчики могут видеть использование в пользовательских реализациях, как это часто бывает.

Чтобы использовать конвертер в XAML, экземпляр может быть создан в разделе « Resources ». В приведенном ниже примере используется System.Windows.Controls.BooleanToVisibilityConverter :

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

Обратите внимание на определенный элемент x:Key , который затем используется для ссылки на экземпляр BooleanToVisibilityConverter в привязке:

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

В приведенном выше примере логическое свойство IsVisible преобразуется в значение перечисления System.Windows.Visibility ; Visibility.Visible если true или Visibility.Collapsed иначе.

Создание и использование конвертера: BooleanToVisibilityConverter и InvertibleBooleanToVisibilityConverter

Чтобы расширить и расширить опыт привязки, мы имеем конвертеры для преобразования одного значения одного типа в другое значение другого типа. Чтобы использовать конвертеры в привязке данных, вам сначала необходимо создать класс DataConverter, который расширяет или

  • IValueConverter (WPF и UWP)

или же

  • IMultiValueConverter (WPF)

если вы хотите преобразовать несколько типов в один тип
В этом случае мы сосредоточимся на преобразовании boolean True/False в соответствие с видимостью Visibility.Visible и 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);
    }
}

Convert метод вызывается всякий раз , когда вы GET данные FROM в ViewModel .
ConvertBack призывается SET ИНГ данные TO в ViewModel для BindingMode.TwoWay привязок.

Конечно, вы также можете использовать свойства в своем конвертере. Взгляните на это:

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

Если вы хотите использовать конвертер в Binding , просто объявите его как ресурс на своей странице, окне или другом элементе, дайте ему ключ и поставьте потенциально необходимые свойства:

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

и использовать его как StaticResource в привязке:

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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow