Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Windows Presentation Foundation.docx
Скачиваний:
12
Добавлен:
13.08.2019
Размер:
1.13 Mб
Скачать

Конвертеры значений

Конвертер значений отвечает за преобразование исходных данных непосредственно перед их отображением в целевом элементе и (в случае двунаправленной привязки) преобразования нового целевого значения непосредственно перед его применением к источнику.

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

  1. Создать класс, реализующий интерфейсIValueConverter.

  2. Добавить атрибут [ValueConversion] в объявление класса и специфицировать исходный и целевой типы данных (это необязательный шаг).

  3. Реализовать метод Convert(), преобразующий данные из исходного формата в отображаемый формат.

  4. Реализовать метод ConvertBack(), выполняющий обратное преобразование значения из отображаемого формата в его «родной» формат.

Приведём пример очень простого конвертера значений, преобразующего булево значение в кисть WPF:

[ValueConversion(typeof(bool), typeof(Brush))]

publicclassBoolToColorConverter : IValueConverter

{

publicobject Convert(object value, Type targetType,

object parameter, CultureInfo culture)

{

return (bool)value ? Brushes.Blue :Brushes.Green;

}

publicobject ConvertBack(object value, Type targetType,

object parameter,

CultureInfo culture)

{

returnnull; // ожидаем, чтопривязкаоднонаправленная

}

}

Чтобы ввести в действие конвертер значений, нужно использовать свойство привязки Converter и, при необходимости, свойства ConverterParameter и ConverterCulture. Как несложно понять, значения последних двух свойств передаются методам конвертирования в качестве аргументов. Объект, соответствующий конвертеру, обычно размещают в ресурсах элемента или окна:

<Window x:Class="WpfApplication.MainWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:Converters="clr-namespace:WpfApplication">

<Window.Resources>

<Converters:BoolToColorConverter x:Key="BoolToColor"/>

</Window.Resources>

<TextBlockForeground="{Binding,

Converter={StaticResourceBoolToColor}}"/>

</Window>

С помощью конвертеров значений можно реализовать оценку нескольких свойств-источников и использование их для создания единственного конвертированного значения. Для этого необходимо:

  • Использовать привязку MultiBinding вместо обычного объекта Binding;

  • Создать конвертер, реализующий интерфейс IMultiValueConverter.

MultiBinding группирует последовательность объектов Binding. Ниже приведен пример, где MultiBinding использует два свойства в объекте данных:

<TextBox>

<TextBox.Text>

<MultiBindingConverter="{StaticResourceValueInStockConverter}">

<Binding Path="UnitCost"/>

<Binding Path="UnitsInStock"/>

</MultiBinding>

</TextBox.Text>

</TextBox>

ИнтерфейсIMultiValueConverterопределяетметодыConvert()иConvertBack(), аналогичноинтерфейсуIValueConverter. Отличие в том, что им передаётся массив значений и типов значений вместо единственного значения. Эти значения помещаются в том же порядке, как они определены в разметке.