Разработка объектной модели карточки

В объектной модели карточки должны быть перечислены все (или необходимые) её секции.

Базовым классом карточки выступает всё тот же класс 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.