Читайте также: |
|
Конвертер значений отвечает за преобразование исходных данных непосредственно перед их отображением в целевом элементе и (в случае двунаправленной привязки) преобразования нового целевого значения непосредственно перед его применением к источнику.
Для создания конвертера значений требуется выполнить четыре шага.
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>
<MultiBinding Converter="{StaticResourceValueInStockConverter}">
<Binding Path="UnitCost"/>
<Binding Path="UnitsInStock"/>
</MultiBinding>
</TextBox.Text>
</TextBox>
ИнтерфейсIMultiValueConverterопределяетметодыConvert()иConvertBack(), аналогичноинтерфейсуIValueConverter. Отличие в том, что им передаётся массив значений и типов значений вместо единственного значения. Эти значения помещаются в том же порядке, как они определены в разметке.
Дата добавления: 2015-11-14; просмотров: 30 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Практическое использование привязки данных | | | Проверка данных |