Разработка объектной модели карточки
В объектной модели карточки должны быть перечислены все (или необходимые) её секции.
Базовым классом карточки выступает всё тот же класс ObjectBase
.
В качестве примера реализуем объектную модель карточки, содержащую секции, рассмотренные ранее. Регистрация секций в карточке, аналогична регистрации полей в секции:
public class SampleCard : ObjectBase
{
(1)
public static readonly ObjectProperty StructSectionProperty; (2)
public static readonly ObjectProperty CollectionSectionProperty; (3)
public static readonly ObjectProperty TreeSectionProperty; (4)
public SampleCardStructSection StructSection (5)
{
get
{
if (((ObjectCollection<SampleCardStructSection>)base.GetValue(SampleCard.StructSectionProperty)).Count = 0) (6)
{
((ObjectCollection<SampleCardStructSection>)base.GetValue(SampleCard.StructSectionProperty)).Add(new SampleCardStructSection());
}
return ((ObjectCollection<SampleCardStructSection>)base.GetValue(SampleCard.StructSectionProperty)).First<SampleCardStructSection>(); (7)
}
}
public ObjectCollection<SampleCardCollectionSection> CollectionSection (8)
{
get { return (ObjectCollection<SampleCardCollectionSection>)base.GetValue(SampleCard.CollectionSectionProperty); }
}
public ObjectCollection<SampleCardTreeSection> TreeSection
{
get { return (ObjectCollection<SampleCardTreeSection>)base.GetValue(SampleCard.TreeSectionProperty); }
set { base.SetValue(SampleCard.TreeSectionProperty, value); } (9)
}
static SampleCard()
{
SampleCard.StructSectionProperty = ObjectProperty.Register("StructSection", typeof(ObjectCollection<SampleCardCollectionSection>), typeof(SampleCard));
SampleCard.CollectionSectionProperty = ObjectProperty.Register("CollectionSection", typeof(ObjectCollection<SampleCardCollectionSection>), typeof(SampleCard));
SampleCard.TreeSectionProperty = ObjectProperty.Register("TreeSection", typeof(ObjectCollection<SampleCardTreeSection>), typeof(SampleCard));
}
protected internal SampleCard() (10)
{
}
protected internal SampleCard(ObjectInitializationData data): base(data)
{
}
}
1 | Объявляются секции карточки. |
2 | Плоская секция. |
3 | Коллекционная секция. |
4 | Иерархическая секция. |
5 | Предоставляется доступ к секциям, а точнее к их строчкам. |
6 | Если секция пустая (не содержит строчек), в ней создаётся строчка. Необязательно. |
7 | Т.к. в секции может быть несколько строчек, для плоской секции возвращается только первая строчка. |
8 | Коллекционная секция возвращает весь список своих строчек. |
9 | Добавляется возможность записывать значение секции напрямую. Необязательно. |
10 | Конструкторы для новой карточки и для существующей карточки. |
Реализация объектной модели справочника ничем не отличается от реализации для карточки.
В библиотеке карточек Базовые объекты базовым классом карточки является класс BaseCard
, дополняющий функциональность класса ObjectBase
. Базовый класс также можно использовать в качестве базового для объектной модели свой карточки. Для справочников в данном случае базовым классом выступает BaseDictionaryCard
.