public static ObservableDataTreeNode CreateParentNode(object nodeValue, Func<object, Task<List<object>>> query)
        {
            var newNode = new ObservableDataTreeNode(nodeValue, DataTreeNodeState.ValidData);
            newNode.HasChildren = true;
            newNode.queryChildren = query;

            return newNode;
        }
        private async void StartQueryChildren(ObservableDataTreeNode node)  // TODO: NoWait();
        {
            if (node.State.HasFlag(DataTreeNodeState.ValidChildren))
            {
                return;
            }

            if (queryChildren == null)
            {
                node.State = DataTreeNodeState.Error;
                return;
            }

            try
            {
                StatusVisibility = Visibility.Visible;

                Task<List<object>> queryChildrenTask = queryChildren(node.Content);
                var children = await queryChildrenTask;

                RemoveAllChildren();
                foreach (var child in children)
                {
                    node.AddChild(ObservableDataTreeNode.CreateParentNode(child, queryChildren));
                }
                node.State |= DataTreeNodeState.ValidChildren;

                StatusVisibility = Visibility.Collapsed;
            }
            catch
            {
                node.State = DataTreeNodeState.Error;
            }
        }