Для того, чтобы конкретный Property Editor отображал данные на основе пользовательского шаблона, необходимо разработать этот шаблон и настроить его применение в Модели Приложения.

Прежде чем продолжить, рекомендуется ознакомится с документом Введение в построение UI.

Начало работы

Редактор Модели

Как уже упоминалось выше, пользовательский шаблон это Web User Control, он определен в ascx-файле. Для хранения шаблонов следует создать в проекте специальный каталог, для определенности будем называть его Templates.

Узел Options|CustomTemplates содержит настройку TemplatesFolderPath. В TemplatesFolderPath указывается путь к каталогу Templates относительно корневого каталога приложения.

Если для свойства бизнес-объекта назначен Xafari Property Editor, поддерживающий пользовательские шаблоны, то задать параметры его работы можно в одном из следующих узлов Модели Приложения:

Каждый из перечисленных узлов предоставляет следующие параметры:

- относительно корневого каталога приложения

- относительно каталога Templates

Если для List View бизнес-объекта назначен Xafari List Editor, поддерживающий пользовательские шаблоны, то задать параметры его работы можно в узле List View объекта.

Узел List View бизнес-объекта предоставляет следующие параметры:

- относительно корневого каталога приложения

- относительно каталога Templates

Чтобы использовать различные шаблоны для элемента управления NestedFrameControl, необходимо перейти к узлу соответствующего свойства бизнес-объекта. Параметр TemplateFrameContex определяет имя контекста, которое используется при определении пути к пользовательскому шаблону. При пустом значении используется шаблон по умолчанию.

 

TemplateResolvers

Работа Property Editor с пользовательским шаблоном может быть обеспечена без непосредственного указания пути к файлу шаблона. Т.е. описанные выше свойства TemplatePathEditMode, TemplatePathViewMode и EditorTemplatePath могут быть не заданы (по умолчанию путь пуст), но Property Editor все равно найдет требуемый ascx-файл. Для этого применяется схема TemplateResolvers.

В Модели Приложение существует узел Options|Custom Templates. Для организации доступа к шаблонам в нем содержатся 3 дочерних узла: Frame, ListEditor, ViewItem.

ViewItem.

Этот раздел обеспечивает поиск шаблонов для элементов Detail View (Detail View item). Количество и последовательность узлов, находящихся в этом разделе, определяют, где будет происходить поиск. Каждый узел предоставляет свойства Index и TemplatePath.  

Index - определяет последовательность узлов, в соответствии с этой последовательностью элемент Detail View будет проверять наличие шаблона, путь к которому указан в TemplatePath.

TemplatePath - определяет путь к шаблону, относительный или абсолютный. Путь является строкой, которая будет интерпретирована ObjectFormatter'ом. Объектом для интерпретации строки является экземпляр элемента Detail View.

В контексте Property Editor можно также использовать выражение {0:View<GetType>}. Оно будет проинтерпретировано как имя типа того Detail View, для которого используется данный элемент.

Примеры TemplatePath:

{0:Model.PropertyEditorType.FullName}\{0:View<GetType>}{0:ViewEditMode}.ascx

{0:Model.PropertyEditorType.Name}/{0:View<GetType>}{0:ViewEditMode}.ascx

Templates/{0:Model.PropertyEditorType.Name}.ascx

ListEditor.

Этот раздел обеспечивает поиск шаблонов для List Editor. Количество и последовательность узлов, находящихся в этом разделе, определяют, где будет происходить поиск. Каждый узел предоставляет свойства Index и TemplatePath.

Index - определяет последовательность узлов, в соответствии с этой последовательностью List Editor будет проверять наличие шаблона, путь к которому указан в TemplatePath.

TemplatePath - определяет путь к шаблону. Составляется также, как и для узла ViewItem.

Frame.

Этот раздел обеспечивает поиск шаблонов для ListPropertyEditor и DetailPropertyEditor. Количество и последовательность узлов, находящихся в этом разделе, определяют, где будет происходить поиск. Каждый узел предоставляет свойства Index и TemplatePath.

Index - определяет последовательность узлов, в соответствии с этой последовательностью будет выполняться проверка наличия шаблона, путь к которому указан в TemplatePath.

TemplatePath - определяет путь к шаблону, относительный или абсолютный. Путь является строкой, которая будет интерпретирована ObjectFormatter'ом. Объектом для интерпретации строки является экземпляр CreateCustomTemplateEventArgs.

Особености

Шаблон для Property Editor или List Editor должен являться потомком класса UserControl и реализовывать интерфейс ICustomTemplate. Альтернативным вариантом является наследование от класса PropertyEditorTemplateBase.

Шаблон для ListPropertyEditor или DetailPropertyEditor должен являться потомком класса NestedFrameControlBase.

Полный путь к шаблону не должен превышать 260 символов.