Интерфейс IValueConverter
В моей первой публикации по Silverlight я отображал столбец даты рождения в элементе управления DataGrid Silverlight 3.0. Как можно видеть, я использовал это изображение и здесь. На следующем рисунке можно видеть, что в столбце даты рождения также отображается и время, что плохо, поскольку в имени столбца говорится о дате, а не о времени. Поэтому для отображения в этом столбце только даты я использовал интерфейс IValueConverter, который применяется для отображения даты без времени. IValueConverter Если требуется сопоставить преобразователь значений с привязкой, создайте класс, реализующий интерфейс IValueConverter, а затем реализуйте методы Convert и ConvertBack. Преобразователи могут изменять один тип данных на другой, переводить данные на основе сведений о языке и региональных параметрах, а также изменять другие аспекты представления. Примеры некоторых типичных сценариев см. в разделе "Преобразование данных" статьи, посвященной обзору привязок данных ("Data Binding Overview"). Преобразователи значений учитывают язык и региональные параметры. Методы Convert и ConvertBack имеют параметр culture, который указывает сведения о языке и региональных параметрах. Если язык и региональные параметры не имеют отношения к преобразованию, то в настраиваемом преобразователе этот параметр можно игнорировать. В методах Convert и ConvertBack имеется также параметр с именем parameter, поэтому можно использовать один и тот же экземпляр преобразователя с разными параметрами. Например, можно написать параметр форматирования, который создает разные параметры данных в зависимости от используемого входного параметра. Можно использовать ConverterParameter класса Binding для передачи параметра в качестве аргумента в методы Convert и ConvertBack (источник). Чтобы достичь цели отображения в столбце даты рождения только даты без времени, при привязке столбца даты рождения я создал класс, который используется для возврата только даты. Далее приводится код моего класса преобразования даты, в котором я реализовал функцию преобразования, но не функцию ConvertBack.
Ниже приводится код xaml для включения пространства имен, в котором размещен мой преобразователь даты: xmlns:local="clr-namespace:SilverLight_Converter" В следующем примере local сопоставляется с пространством имен, в котором задан преобразователь DateConverter, и я установил здесь имя преобразователя DisplayDate. Поэтому везде, где мне потребуется использовать этот преобразователь в коде xaml, я могу использовать это имя статического ресурса.
Далее приводится xaml столбца даты, который используется для отображения только даты, и можно видеть синтаксис части привязки. В этом примере привязывается свойство DateOfBirth внешнего источника данных, которое также содержит часть даты, но поскольку я разместил преобразователь, в этом случае отображается только часть даты.
Ниже показан выходной результат после использования преобразователя даты в файле xaml. Теперь можно видеть, что столбец даты рождения содержит только часть даты, а часть времени не показывается. Исходный код можно загрузить здесь. Приветствуются любые комментарии, сообщения об ошибках и предложения! |