Форматированный вывод

Дополнительный формат указывается в нотации стандартных форматеров .NET. Используется следующая нотация:

{0:<формат_навигация_по_свойствам>,<форматирование>}

Для расчета форматированного значения используется специальный сервис Formatter, который понимает выбранную нотацию описания формата. Для своей работы Formatter требует указания объекта (контекста), который используется как параметр алгоритма.

Например, если нам необходимо рассчитать значение параметра объекта и при этом использовать Дату создания документа, то в качестве контекста должен использоваться объект Реквизит, и формат будет иметь вид:

={0:Документ.ДатаСоздания, yyyy}

Символ "=" в начале строки означает, что данный текст представляет собой формат для formatter. Все, что следует сразу за символом "=", подлежит форматированию.

Фигурные скобки ограничивают ту часть текста, куда должно попасть форматированное значение. (Чтобы отобразить в конечном результате символы "{" и "}", необходимо использовать "{{" и "}}" соответственно). Formatter разбивает всю исходную строку на части, выделяет все те, которые подлежат форматированию, и последовательно запускает алгоритм форматирования для каждой части.

0: - это обязательная часть, которая сообщает форматеру, что для данного формата в качестве контекста будет использоваться 0-ой параметр. (В данном форматере можно передать только один объект (контест) в качестве параметра. Поэтому всегда используется 0.) В нашем примере в качестве контекста выступает объект Реквизит.

После двоеточия следует сам формат, который может состоять из двух частей:

  1. Обязательная часть. Указывает путь навигации по свойствам объектов, чтобы добраться до нужного объекта и отформатировать его значение. Форматер умеет проводить навигацию по свойствам объекта стандартных типов, ссылочных, а также по элементам коллекций (см. Навигация по элементам коллекции). Есть ряд свойств (может изменяться), которые называются параметрами, носят глобальный характер  и которые также могут использоваться при навигации (см. Навигация по свойствам параметров). В нашем примере это означает, что начиная от объекта Реквизит (начальный контекст) сначала берем его свойство Документ, затем у объекта Документ берем свойство ДатаСоздания. Полученный в самом конце объект и будет форматироваться.
  2. Необязательная часть. Форматирование конечного объекта. Если эта часть не указана, то будет использоваться формат по умолчанию, определенный для каждого типа данных. В нашем примере указан формат ‘yyyy’. Это означает, что конечный объект имеет тип Дата и для него применяется этот формат, который выведет Год и для этого использует 4 символа.

Полное описание поддерживаемых форматов для стандартных типов данных можно изучить по следующим источникам:

Навигация по элементам коллекции

Коллекция должна реализовывать один из следующих интерфейсов: ICalculatedParameter, IDictionary, IList, IEnumerable. Для навигации по элементам коллекций применяется следующая нотация:

 

{0:<свойство_или_элемент_коллекции>(.<свойство_или_элемент_коллекции>),<форматирование>}

<свойство_или_элемент_коллекции> :- <свойство> | [<индекс>] | [Значение]

<индекс> :- <порядковый номер> | <текст>

 

Навигация по свойствам параметров XAF

Нотация:

 

{0:@<имя_параметра>.<свойство_или_элемент_коллекции>(.<свойство_или_элемент_коллекции>),<форматирование>}

Список констант может быть расширен по мере необходимости. По умолчанию он содержит: