Главная » C#, Windows Runtime, XAML, Разработка для Windows 8 » Конвертеры данных Windows Runtime

0

Выше  мы  рассматривали простую  «переброску»  данных  из   одного   места в другое. Но существует достаточно много ситуаций, когда данные не могут быть преобразованы с помощью вызова метода ToString или с помощью стандартных конвертеров.

Рассмотрим   пример,   в     котором   определим   в     нашем   классе   Employee

дополнительное свойство Salary.

private double salary; public double Salary

{

get

{

}

return salary;

set

{

}

}

salary = value;

OnPropertyChanged(new PropertyChangedEventArgs("Salary"));

Поскольку речь идет о зарплате, то было бы логично выдавать значение этого свойства со знаком местной валюты. Следовательно, необходимо реализовать специальный механизм, который будет  преобразовывать  данные. К счастью, в  Silverlight это сделать  достаточно просто. Нужно просто определить класс, реализующий интерфейс IValueConverter, который описывает  всего два метода: Convert   и  ConvertBack.  Первый метод  используется  для   преобразования значения от источника к цели, а второй — от цели к источнику.

Ниже    приведен   пример    реализации     класса,     позволяющего     делать преобразование значения типа double к денежному представлению и наоборот.

public class MoneyConverter : IValueConverter

{

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)

{

return ((double)value).ToString("C");

}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

{

double result; try

{

result = double.Parse((string)value, NumberStyles.AllowThousands | NumberStyles.AllowDecimalPoint | NumberStyles.AllowCurrencySymbol);

}

catch

{

result = 0;

}

return result;

}

}

Чтобы  подключить  наш  конвертер к  привязке, воспользуемся   свойством Converter объекта Binding. Есть только одно «но» — это свойство принимает ссылку на готовый объект, которого у нас еще нет. Поэтому определим объект созданного класса в ресурсах приложения:

<UserControl.Resources>

<data:MoneyConverter x:Key="mConverter"></data:MoneyConverter>

</UserControl.Resources>

Тут  data  представляет собой  имя  пространства имен,   ссылающегося  на пространство имен кода C#.

xmlns:data="clr-namespace:Chapter5_Binding"

А  вот   теперь  можно  определить  привязку свойства   Salary  к   очередному текстовому полю:

<TextBlock Text="Salary:" Grid.Row="4" Grid.Column="0"></TextBlock>

<TextBox Text="{Binding Path=Salary, Converter={StaticResource mConverter}, Mode=TwoWay}"

Grid.Row="4" Grid.Column="1">

</TextBox>

Результат работы приложения показан ниже:

Рис. 5.2.

Сергей Лутай, Сергей Байдачный, Windows 8 для C# разработчиков

По теме:

  • Комментарии