понедельник, 25 октября 2010 г.

Создание конвертера в WPF

Недавно задался целью вывести обычную дату в поле таблицы. На первый взгляд ничего "военного", но вот незадача, дата выводиться в системном формате (по умолчанию) в данном случае это день/месяц/год часы:минуты (кажется было так).
Мне потребовалось выводить только день и месяц, причем месяц сокращенный: 25.окт.
Порывшись немного в интернете я смастерил следующий конвертер.

Я не буду подробно описывать связь класса моделью отображения и привязку данных к колонке, это все можно найти на сайте msdn.

В данном примере конвертер был встроен в dataGrid который находился на UserControl.

XAML:

Описываем конвертер


    <UserControl.Resources>
        <uc:ConvertDate x:Key="dateConv"/>
    </UserControl.Resources>
 ......................................................

ниже используем при выводе данных:

    <my:DataGridTextColumn Header="Дата" 
      Binding="{Binding PaymentDay, Converter={StaticResource dateConv}}" CanUserResize="False" />

 CS файл 

Данный класс я разместил в том же namespace что и окно.

    public class ConvertDate : IValueConverter
    {
        public object Convert(object value, System.Type targetType, object parameter, CultureInfo culture)
        {
            String st = "";
            if (value is DateTime)
            {
                 // в данном месте можно выполнить требуемые преобразования и задать
                 // любой вариант конвертации
                st = ((DateTime)value).ToString("dd.MMM");
            }
            return st;
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotSupportedException("This method should never be called");
        }
    }

Комментариев нет: