Содержание:

Определение стратегии

Стратегия макета View это класс, являющийся наследником абстрактного класса ViewLayoutStrategyBase и реализующий его методы. Платформа Xafari предоставляет возможность использования двух стратегий:

Основная идея XafViewLayoutStrategy заключается в том, что XAF генерирует три View для каждого персистентного объекта: List View, Lookup List View и Detail View, мы будем называть их "View по умолчанию" (default View). XAF выносит на View все свойства персистентного объекта.

XafariViewLayoutStrategy исключает все свойства персистентного объекта из View по умолчанию. Для того, чтобы сделать свойство видимым, к нему придется применить соответствующий атрибут, это делается на этапе кодирования бизнес-класса.

Кроме того, в коде бизнес-класса можно установить любое количество дополнительных View и для каждого из них установить набор отображаемых свойств.

При разработке приложения существует два способа, чтобы определить стратегию генерации View.

Во-первых, можно воспользоваться атрибутом ViewLayoutStrategyAttribute. Атрибут определяет, какая стратегия генерации View будет использоваться для представления объекта в UI. Тип стратегии передается в качестве параметра, например

[ViewLayoutStrategy(typeof(XafariViewLayoutStrategy))].

Этот атрибут следует указать перед классом бизнес-объекта либо перед интерфейсом, в случае использования Domain Components. Можно также применить его для всей сборки. В этом случае выбранная стратегия будет распространяться на все классы, включенные в сборку.

Второй способ позволяет определять стратегию для конкретного View. Это можно сделать с помощью необязательного параметра LayoutStrategy атрибутов CreateListView и CreateDetailView (см. ниже).  

Замечание:

Коллекция XafariModule.XafViewLayoutStrategyType содержит те типы, View для которых необходимо генерировать по стандартным настройкам View XAF. При создании собственной стратегии необходимо учитывать данную коллекцию.

Дополнительные View

Использование XafariViewLayoutStrategy предусматривает возможность создавать дополнительные View для любого бизнес-объекта.  Для этого класс бизнес-объекта должен быть предварен атрибутом CreateListView либо CreateDetailView. Например,

[CreateListView(Id = "XafariViewLayoutGeneratorObject_Code1_LookupListView", Layout = "Integer;Long;String", ListViewType = ListViewType.LookupListView)]

[CreateDetailView(Id = "XafariViewLayoutGeneratorObject_Code1_DetailView", Layout = "String;Integer;Double;" +

                                                                                   "GroupByte[Byte,Byte,Byte];" +

                                                                                       "GroupDecimal[Decimal,Decimal,Decimal];" +

                                                                                       "GroupFloat[Float,Float,Float];Objects")]

Атрибуты предоставляют ряд параметров, которые позволяют сразу сконфигурировать будущий узел View в Модели Приложения. 

Id является общим параметром для обоих атрибутов и определяет уникальный идентификатор для нового View.

Замечание:

Возможен вариант использования атрибута Create...View без указания параметра Id. В этом случае новое View создаваться не будет, а будет использоваться View по умолчанию. Однако это View по умолчанию будет удовлетворять прочим параметрам, указанным в атрибуте. Параметры атрибута Create...View будут иметь приоритет над атрибутами, которые кастомизируют View по умолчанию (см. Кастомизация View по умолчанию ниже).

Layout: при помощи данного параметра разработчик описывает перечень и расположение полей (колонок) на будущем View. В CreateListView и CreateDetailView значение этого свойства интерпретируется по-разному.

Свойство Layout атрибута CreateListView должно содержать строку, в которой через символ «;» перечислены имена свойств по которым будут сгенерированы колонки для List View в порядке их перечисления.

Свойство Layout атрибута CreateDetailView должно содержать строку, в которой через символ «;» перечислены имена свойств или групп свойств по которым будет сгенерировано расположение полей на Detail View в порядке их перечисления.

Например:

Layout  = "ИмяСвойства1; ИмяСвойства2;ИмяГрупы1[ИмяСвойства3,ИмяСвойства4]"

Обратите внимание, что свойства, принадлежащие определённой группе, заключены в квадратные скобки и разделяются запятой. Если свойство не привязано к группе, то оно должно попасть в группу с имением "General",  она всегда расположена вверху Detail View.

Следующие параметры актуальны только для атрибута CreateListView:

Узлы объектов иерархического типа в Модели Приложения расширены настройками DefaultTreeListView и DefaultGridListView (см. интерфейс IModelClassXafari). Эти значения можно задать с помощью следующих параметров атрибута CreateListView:

Атрибут CreateListView можно применять также к свойству типа IList без указания Id. Такой вариант использования позволит кастомизировать List View по умолчанию для отображения свойства.

Кастомизация View по умолчанию

Если вы используете XafariViewLayoutStrategy, то все свойства бизнес-объекта будут исключены из View по умолчанию (default View). Видимость свойств требуется устанавливать индивидуально, используя атрибуты, причем видимость каждого свойства можно задавать отдельно для каждого типа View. Чтобы указать видимость свойства, примените к нему следующие атрибуты с параметром true:

Для указания группировки свойств и порядка расположения воспользуйтесь атрибутами ViewLayoutGroupAttribute, с указанием имени группы, и Index, с указанием номера расположения. Для настройки порядка расположения групп воспользуйтесь Редактором Модели.

Вычисляемое название колонки

При использовании стратегии Xafari колонки List View будут обладать специфическим поведением. Если колонка отображает свойство связанного объекта, то она будет именоваться по полному имени этого свойства. Например, свойство ThisObject ссылается на объект, у которого есть свойство BirthData. Соответствующая колонка будет иметь подпись "ThisObject. BirthData". Это позволяет избежать путаницы в тех случаях, когда у нескольких связанных объектов конечные свойства названы одинаково.

Вы можете изменить это поведение в Модели Приложения. Откройте Редактор Модели и перейдите к узлу, который представляет колонку в List View. Найдите свойство CaptionCalculator и задайте ему значение Default.

После этого колонка станет именоваться стандартным образом, то есть отображать только имя последнего свойства в цепочке.