Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

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

Встроенные контейнеры компоновки | Прочие элементы управления | Базовые концепции привязки данных | Трансформации | Стили и триггеры | Шаблоны элементов управления | Шаблоны данных |


Читайте также:
  1. Future Indefinite (Simple) / Майбутній неозначений час
  2. Б.2 ИНДЕКСЫ БУКВЕННЫХ ОБОЗНАЧЕНИЙ И ПОЯСНЯЮЩИЕ ИХ СЛОВА
  3. Величины полезности разных альтернатив для различных значений емкости рынка
  4. Задание точных значений параметров преобразования
  5. Кастомизация таблицы назначений
  6. Конвертеры значений

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

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

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

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

3. Реализовать метод Convert(), выполняющий преобразование данных от источника к целевому объекту.

4. Реализовать метод ConvertBack(), делающий обратное преобразование.

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

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

public class DoubleToColorConverter: IValueConverter

{

public object Convert(object value, Type targetType,

object parameter, CultureInfo culture)

{

return (double) value > 18? Brushes.Blue: Brushes.Red;

}

 

public object ConvertBack(object value, Type targetType,

object parameter, CultureInfo culture)

{

// это конвертер для однонаправленной привязки

return null;

}

}

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

Используем конвертер DoubleToColorConverter в примере привязки для объекта Person. Объект конвертера разместим в ресурсах окна. Предполагаем, что объект-источник присваивается свойству окна DataContext в коде:

<Window x:Class="WpfBinding.MainWindow"

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

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

xmlns:local="clr-namespace:WpfBinding"

Height="200" Width="400" Title="WPF Binding">

<Window.Resources>

<local:DoubleToColorConverter x:Key="dc" />

</Window.Resources>

 

<Grid Margin="10">

<!-- описание структуры Grid опущено для краткости -->

 

<TextBlock Grid.Column="0" Grid.Row="0" Text="Name" />

<TextBox Grid.Column="1" Grid.Row="0"

Text="{Binding Name, Mode=TwoWay}" />

 

<TextBlock Grid.Column="0" Grid.Row="1" Text="Age" />

<TextBox Grid.Column="1" Grid.Row="1"

Text="{Binding Age, Mode=TwoWay}"

Foreground="{Binding Age,

Converter={StaticResource dc}}" />

</Grid>

</Window>

В состав WPF входит ряд конвертеров для нескольких распространённых сценариев привязки. Один из них называется BooleanToVisibilityConverter и преобразует перечисление Visibility в тип bool?.

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

1. Использовать привязку MultiBinding вместо Binding;

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

Класс MultiBinding схож с классом Binding – оба класса унаследованы от System.Windows.Data.BindingBase. Класс MultiBinding группирует привязки в коллекцию Bindings.

<!-- TextBlock будет показывать имя и возраст Person -->

<TextBlock>

<TextBlock.Text>

<MultiBinding StringFormat="{}{0} - {1}">

<Binding Path="Name" />

<Binding Path="Age" />

</MultiBinding>

</TextBlock.Text>

</TextBlock>

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


Дата добавления: 2015-11-14; просмотров: 36 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Источники и поставщики данных| Проверка данных

mybiblioteka.su - 2015-2024 год. (0.013 сек.)