Beispiel #1
0
        private bool ChangeParent(BoundTreeNode node)
        {
            var message = string.Empty;

            var dataParentId = _parentIdentifierProperty.GetValue(_listManager.List[node.Position]);
            if (dataParentId == null)
            {
                node.Remove();
                Nodes.Add(node);

                return true;
            }

            if (node.ParentNodeId == null || node.ParentNodeId.GetHashCode() != dataParentId.GetHashCode())
            {
                if (node.NodeId.GetHashCode() == dataParentId.GetHashCode())
                {
                    message = "Node cannot be its own parent.";
                }
                else
                {
                    var newParentNode = _itemsIdentifiers[dataParentId] as BoundTreeNode;
                    if (newParentNode == null)
                    {
                        message = "Item not found or wrong type.";
                    }
                    else
                    {
                        if (IsOwnAncestor(node, newParentNode))
                        {
                            message = "Node cannot be its own ancestor.";
                        }
                        else
                        {
                            node.Remove();
                            newParentNode.Nodes.Add(node);
                            CheckAccess(node);

                            SelectedNode = node;
                            if (SelectedNode != null)
                                SelectedNode.EnsureVisible();

                            return true;
                        }
                    }
                }
            }

            if (message != string.Empty)
            {
                Logger.Warn(message);
                node.NodeError = true;
                return false;
            }

            return true;
        }