- •А.А. Волосевич
- •1. ОбщееописаниеWpf
- •2. ПРостейшее ПриложениеWpf
- •4. Базовые концепции wpf Иерархия классов
- •Свойства зависимостейи присоединённые свойства
- •Маршрутизируемыесобытия
- •Многопоточность в wpf
- •5. СтруктуРа Оконного приложения wpf
- •Класс Window
- •КлассApplication
- •6. Компоновка
- •Размер и выравнивание
- •Основные контейнеры компоновки
- •Прокрутка и декорирование содержимого
- •7. Обзор элеменТов управления
- •Цвета и окантовка:
- •Шрифт содержимого:
- •Элементы управления содержимым
- •Списковые элементы управления
- •Прочие элементы управления
- •8. Фигуры
- •9. Цвет,кисти, прозрачность Представление цвета в wpf
- •Лучшие кисти
- •Прозрачность
- •10. Трансформации и эффекты
- •11. Классы drawing иvisual
- •12. Ресурсы
- •Двоичные ресурсы
- •Логические ресурсы
- •13. Привязка данных Базовые концепции привязки данных
- •Практическое использование привязки данных
- •Конвертеры значений
- •Проверка данных
- •14. Стилии триггеры
- •15. ПрИвязкакколлекциямиШаблоныданных
- •16. Представления Данных
- •17. ШАблоны элементов управления
Конвертеры значений
Конвертер значений отвечает за преобразование исходных данных непосредственно перед их отображением в целевом элементе и (в случае двунаправленной привязки) преобразования нового целевого значения непосредственно перед его применением к источнику.
Для создания конвертера значений требуется выполнить четыре шага.
Создать класс, реализующий интерфейсIValueConverter.
Добавить атрибут [ValueConversion] в объявление класса и специфицировать исходный и целевой типы данных (это необязательный шаг).
Реализовать метод Convert(), преобразующий данные из исходного формата в отображаемый формат.
Реализовать метод 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. Отличие в том, что им передаётся массив значений и типов значений вместо единственного значения. Эти значения помещаются в том же порядке, как они определены в разметке.