public void LoadSubItems(IDynamicTreeClass instance, ItemCollection items)
        {
            // načíst podelementy:
            List <IDynamicTreeClass> childs = instance.GetChilds(instance.Uid);

            // vyčistit případné nulové děti v uzlu - pro minulé zobrazování trojůhelníčku pro rozevírání:
            items.Clear();
            // projít cšechny načtené podděti:
            foreach (IDynamicTreeClass child in childs)
            {
                // vytvořit novou vizuelní instanci pro stromeček:
                TreeViewItem node = new TreeViewItem()
                {
                    Header      = child.Header,
                    DataContext = child,
                    Tag         = false
                };
                // zkusit také načíst její podděti:
                child.GetChilds(child.Uid);
                // pokud je má - zařídit zobrazení rozevíracího trojůhelníčku:
                if (child.HasChilds)
                {
                    node.Items.Add(null); // přidá jeden nulový potomek -> zobrazí se rozevírací trojúhelník
                }
                // přidání události na kliknutí:
                node.MouseDoubleClick += this._nodeDoubleClickHandler;
                node.Expanded         += this._nodeExpandedHandler;
                // přidání nové vizuelní instance do cílové kolekce items:
                items.Add(node);
            }
        }
        private void _nodeExpandedHandler(object sender, RoutedEventArgs e)
        {
            TreeViewItem node = (TreeViewItem)e.OriginalSource;

            //node.DataContext - instance modelové třídy
            //node.Tag - ano/ne - o tom, zda jsem už někdy načítal a vytvářel poduzly
            if (!(bool)node.Tag)
            {
                node.Tag = true;
                IDynamicTreeClass child = (IDynamicTreeClass)node.DataContext;
                this.LoadSubItems(child, node.Items);
            }
        }
        private void _nodeDoubleClickHandler(object sender, MouseButtonEventArgs e)
        {
            //TreeViewItem node = (TreeViewItem)e.OriginalSource;
            TreeViewItem      node  = (TreeViewItem)sender;
            IDynamicTreeClass child = (IDynamicTreeClass)node.DataContext;

            // spustit (odfirovat) vlastní definovanou událost:

            if (this.TreeItemDoubleClick == null)
            {
                return;
            }

            this.TreeItemDoubleClick.Invoke(
                node,
                new DynamicTreeItemEventArgs()
            {
                ModelClassInstance = child
            }
                );
            e.Handled = true; // TODO
        }