private IEnumerable <IWordTreeViewItem> CreateItemsFromXml(XmlNode rootNode, IWordTreeViewItem rootNodeItem)
        {
            var result = new IWordTreeViewItem[rootNode.ChildNodes.Count];

            for (int i = 0; i < rootNode.ChildNodes.Count; i++)
            {
                XmlNode node = rootNode.ChildNodes[i];
                switch (node.Name)
                {
                case WordNode:
                    result[i] = new WordViewModel(node.Attributes[TextAttribute].Value, rootNodeItem, _viewModel.DataService);
                    break;

                case CategoryNode:
                    var newNode  = new WordCategoryViewModel(node.Attributes[TextAttribute].Value, rootNodeItem, _viewModel.DataService);
                    var children = CreateItemsFromXml(node, newNode);

                    newNode.Children = new System.Collections.ObjectModel.ObservableCollection <IWordTreeViewItem>(children);
                    result[i]        = newNode;
                    break;

                default:
                    throw new XmlException($"unknown node name {node.Name}");
                }
            }

            return(result);
        }
        public WordViewModel(string word, IWordTreeViewItem parent, TreeViewDataService <IWordTreeViewItem> dataService)
            : base(word, dataService)
        {
            if (parent == null)
            {
                throw new ArgumentNullException(nameof(parent));
            }

            Parent = parent;

            RemoveCommand = new BasicCommand(_ => Remove());
        }
        public WordCategoryViewModel(string header, IWordTreeViewItem parent, TreeViewDataService <IWordTreeViewItem> dataService, bool dragEnabled)
            : base(header, dataService)
        {
            Parent      = parent;
            DragEnabled = dragEnabled;

            Children = new ObservableCollection <IWordTreeViewItem>();

            AddWordToCategoryCommand = new BasicCommand(AddWordToCategory);
            AddSubcategoryCommand    = new BasicCommand(AddSubcategory);
            StartRenameCommand       = new BasicCommand(StartRename);
            StopRenameCommand        = new BasicCommand(StopRename);
            SortCategoryCommand      = new BasicCommand(SortCategory);
        }
 public WordCategoryViewModel(string header, IWordTreeViewItem parent, TreeViewDataService <IWordTreeViewItem> dataService) : this(header, parent, dataService, true)
 {
 }