Конвертери даних Windows Runtime

Вище ми розглядали просту «перекидання» даних з одного місця в інше Але існує досить багато ситуацій, коли дані не можуть бути перетворені за допомогою виклику методу ToString або за допомогою стандартних конвертерів

Розглянемо приклад, в якому визначимо в нашому класі Employee

додаткова властивість Salary

private double salary public double Salary

{

get

{

}

return salary

set

{

}

}

salary = value

OnPropertyChanged(new PropertyChangedEventArgs(&quotSalary&quot))

Оскільки йдеться про зарплату, то було б логічно видавати значення цієї властивості зі знаком місцевої валюти Отже, необхідно реалізувати спеціальний механізм, який буде перетворювати дані На щастя, в Silverlight це зробити досить просто Потрібно просто визначити клас, який реалізує інтерфейс IValueConverter, Який описує всього два методи: Convert   іConvertBack Перший метод використовується для перетворення значення від джерела до мети, а другий – від мети до джерела

Нижче наведено приклад реалізації класу, що дозволяє робити перетворення значення типу double до грошового поданням і навпаки

public class MoneyConverter : IValueConverter

{

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

{

return ((double)value)ToString(&quotC&quot)

}

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

{

double result try

{

result = doubleParse((string)value, NumberStylesAllowThousands | NumberStylesAllowDecimalPoint | NumberStylesAllowCurrencySymbol)

}

catch

{

result = 0

}

return result

}

}

Щоб підключити наш конвертер до привязки, скористаємося властивістю Converter обєкта Binding Є тільки одне «але» – це властивість приймає посилання на готовий обєкт, якого у нас ще немає Тому визначимо обєкт створеного класу в ресурсах програми:

&ltUserControlResources&gt

&ltdata:MoneyConverter x:Key=&quotmConverter&quot&gt&lt/data:MoneyConverter&gt

&lt/UserControlResources&gt

Тутdata  являє собою імя простору імен, що посилається на простір імен коду C #

xmlns:data=&quotclr-namespace:Chapter5_Binding&quot

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

&ltTextBlock Text=&quotSalary:&quot GridRow=&quot4&quot GridColumn=&quot0&quot&gt&lt/TextBlock&gt

&ltTextBox Text=&quot{Binding Path=Salary, Converter={StaticResource mConverter}, Mode=TwoWay}&quot

GridRow=&quot4&quot GridColumn=&quot1&quot&gt

&lt/TextBox&gt

Результат роботи програми показаний нижче:

Рис 52

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

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*