Настоящий документ содержит перечень замечаний и рекомендаций о реализации работы с иерархическими объектами.

Свойство, которое ссылается на родительский узел, должно сопровождаться атрибутом [ParentProperty()]. Аналогично, свойство дочернего узла сопровождается атрибутом [ChildrenProperty()].

Аттрибуты [HierarchyNodeNameProperty()], [HierarchyFullNameProperty()] и [HierarchyFullPathProperty()] предназначены для свойств, которые будут задавать имя иерархии, полное имя и полный путь соответственно.

Замечание:

Интерфейс IHierarchyNode предусматривает поддержку нескольких иерархий. Если объект поддерживает 2 и более иерархии, то атрибутам следует передать параметр, который указывает имя иерархии.

[ParentProperty(“Hierarchy1”)] 

[ChildrenProperty(“Hierarchy1”)]

[HierarchyNodeNameProperty(“Hierarchy1”)]

[HierarchyFullNameProperty(“Hierarchy1”)]

[HierarchyFullPathProperty(“Hierarchy1”)]

Атрибуту [ChildrenProperty()] можно передать параметр, который указывает способ удаления объекта:

[ChildrenProperty("Hierarchy1",DeletingMode = DeletingMode.Replacement)]

При этом потребуется переопределить метод OnDeleting(). Добавьте к базовой функциональности метод DeletingObject(this) класса HierarchyNodePersistentHelper.

protected override void OnDeleting()

                {

                    base.OnDeleting();

                    HierarchyNodePersistentHelper.DeletingObject(this);

                }

Наличие у объекта дочерних узлов можно запрашивать несколькими различными способами:

Чтобы указать конкретный способ, используйте параметр GetChildrenCountMode атрибута [ChildrenProperty()]  

[ChildrenProperty GetChildrenCountMode = GetChildrenCountMode.DirectDatabaseCount)]

Чтобы предотвратить ситуации зацикливания, используйте метод CheckCircularReference(this) класса HierarchyNodePersistentHelper.

Для объектов иерархического типа расширен интерфейс IModelClassXafari. Добавлены две настройки: DefaultTreeListView и DefaultGridListView.  

DefaultTreeListView определяет списковую форму по умолчанию с древовидным редактором.

DefaultGridListView определяет списковую форму по умолчанию со списковым редактором (например, GridListEditor).

Обе настройки по умолчанию содержат значения из свойства DefaultListView.

HierarchyNode и HierarchicalClassifierItem

Платформа Xafari предоставляет разработчику типы с готовой реализацией интерфейса IHierarchyNode: HierarchyNode и HierarchicalClassifierItem.

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

После удаления объекта HierarchicalClassifierItem учитывается модификатор удаления. Методы AfterConstruction и OnDeleting являются виртуальными.