В настоящей статье изложен пример простой реализации интерфейса IHierarchyNode. Ряд свойств и методов реализован с использованием класса HierarchyNodePersistentHelper. Выполните шаги, описанные ниже.

 

[DefaultClassOptions]

    public class HierarchyNodeObject : BaseObject, IHierarchyNode

    { 

        public HierarchyNodeObject(Session session) : base(session) { }

 

        private string _name;

        [HierarchyNodeNameProperty()]

        public String Name

        {

            get { return _name; }

            set { SetPropertyValue("Name", ref _name, value); }

        }

 

        private string _hierarchyFullName;

        [Size(SizeAttribute.Unlimited)]

        [ModelDefault("RowCount", "0")]

        [ModelDefault("AllowEdit", "false")]

        [HierarchyFullNameProperty()]

        public string HierarchyFullName

        {

            get { return _hierarchyFullName; }

            set { SetPropertyValue("HierarchyFullName", ref _hierarchyFullName, value); }

        }

 

        private string _hierarchyFullPath;

        [Size(SizeAttribute.Unlimited)]

        [ModelDefault("RowCount", "0")]

        [ModelDefault("AllowEdit", "false")]

        [HierarchyFullPathProperty()]

        public string HierarchyFullPath

        {

            get { return _hierarchyFullPath; }

            set { SetPropertyValue("HierarchyFullPath", ref _hierarchyFullPath, value); }

        }

 

        private HierarchyNodeObject _parent;

        [Association("Parent - Children")]

        [ParentProperty()]

        public HierarchyNodeObject Parent

        {

            get { return _parent; }

            set { SetPropertyValue("Parent1", ref _parent, value); }

        }

 

        [Association("Parent - Children")]

        [ChildrenProperty()]

        public XPCollection<HierarchyNodeObject> Children

        {

            get { return GetCollection<HierarchyNodeObject>("Children"); }

        }

 

        protected override void OnSaving()

        {

            base.OnSaving();

            foreach (var hierarchy in XafTypesInfo.Instance.FindTypeInfo(this.GetType()).Type.GetHierarchies())

                HierarchyNodePersistentHelper.UpdateFullNameAndFullPath(this, hierarchy);

        }

        #region Implementation of IHierarchyNode

 

        public string GetHierarchyNodeName(string hierarchyName = null)

        {

            return HierarchyNodePersistentHelper.GetNodeName(this, hierarchyName);

        }

 

        public string GetHierarchyNodeFullName(string hierarchyName = null)

        {

            return HierarchyNodePersistentHelper.GetNodeFullName(this, hierarchyName);

        }

 

        public void SetHierarchyNodeFullName(string value, string hierarchyName = null)

        {

            HierarchyNodePersistentHelper.SetNodeFullName(this, value, hierarchyName);

        }

 

        public string GetHierarchyNodeFullPath(string hierarchyName = null)

        {

            return HierarchyNodePersistentHelper.GetNodeFullPath(this, hierarchyName);

        }

 

        public void SetHierarchyNodeFullPath(string value, string hierarchyName = null)

        {

           HierarchyNodePersistentHelper.SetNodeFullPath(this, value, hierarchyName);

        }

 

        public IHierarchyNode GetHierarchyParent(string hierarchyName = null)

        {

            return HierarchyNodePersistentHelper.GetParent(this, hierarchyName);

        }

 

        public void SetHierarchyParent(IHierarchyNode parent, string hierarchyName = null)

        {

           HierarchyNodePersistentHelper.SetParent(this, parent, hierarchyName);

        }

 

        public IList GetHierarchyChildren(string hierarchyName = null)

        {

            return HierarchyNodePersistentHelper.GetChildren(this, hierarchyName);

        }

 

        #endregion

 

Примеры по данной теме вы также можете найти в демо-приложениях Northwind, Northwind.DC и Feature Center ( файл HierarchyNodeEditorObject.cs).