Если в спецификаторе формата отсутствует какой-либо текст, тогда его понадобится предварить пустым набором фигурных скобок, который является управляющей последовательностью для XAML. Такой прием уведомляет процессор о том, что следующие за {}
BorderThickness="2" Content = "{Binding Path=Value}"
ContentStringFormat="{}{0:F0}"/>
На заметку!
При привязке свойстваText элемента управления пару "имя-значение" объекта StringFormat можно добавлять прямо в конструкции привязки. Она должна быть отдельной только для свойств Content.Преобразование данных с использованием интерфейса IValueConverter
Если требуется нечто большее, чем просто форматирование данных, тогда можно создать специальный класс, реализующий интерфейс IValueCVonverter
System.Windows.Data. В интерфейсе IValueCVonverter определены два члена, позволяющие выполнять преобразование между источником и целью (в случае двунаправленной привязки). После определения такой класс можно применять для дальнейшего уточнения процесса привязки данных.Вместо использования свойства форматирования можно применять преобразователь значений для отображения целых чисел внутри элемента управления Label
MyDoubleConverter) со следующим кодом:using System;
using System.Windows.Data;
namespace WpfControlsAndAPIs
{
public class MyDoubleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
// Преобразовать значение double в int.
double v = (double)value;
return (int)v;
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
// Поскольку заботиться здесь о "двунаправленной" привязке
// не нужно, просто возвратить значение value.
return value;
}
}
}
Метод Convert
ScrollBar) к цели (свойство Content элемента Label). Хотя он принимает много входных аргументов, для такого преобразования понадобится манипулировать только входным аргументом типа object, который представляет текущее значение double. Данный тип можно использовать для приведения к целому и возврата нового числа.Метод ConvertBack
value. Это позволяет вводить в TextBox значение с плавающей точкой (например, 99.9) и автоматически преобразовывать его в целочисленное значение (99), когда пользователь перемещает фокус из элемента управления. Такое "бесплатное" преобразование происходит из-за того, что метод Convert будет вызываться еще раз после вызова ConvertBack. Если просто возвратить null из ConvertBack, то синхронизация привязки будет выглядеть нарушенной, т.к. элемент TextBox по-прежнему будет отображать число с плавающей точкой.Чтобы применить построенный преобразователь в разметке, сначала нужно создать локальный ресурс, представляющий только что законченный класс. Не переживайте по поводу механики добавления ресурсов; тема будет детально раскрыта в нескольких последующих главах. Поместите показанную ниже разметку сразу после открывающего дескриптора Window
Далее обновите конструкцию привязки для элемента управления Label
BorderThickness="2"
Content = "{Binding Path=Value,
Converter={StaticResource
DoubleConverter}}" />Теперь после запуска приложения вы будете видеть только целые числа.
Установление привязок данных в коде
Специальный преобразователь данных можно также регистрировать в коде. Начните с очистки текущего определения элемента управления Label
Data Binding, чтобы расширение разметки {Binding} больше не использовалось: BorderThickness="2" />
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT