MrutyunjayS Ответов: 1

Wpf: treeview не обновляется во время преобразования xmlnode в treeviewitem


I am new to C# and VS and am trying to convert XmlNode to TreeViewItem and reflect the changes into TreeView in a recursive manner but TreeView is not updated/ not showing the nodes. Below is my TreeView.xaml code:

<TreeView x:Name="DAPITreeView"  Margin="5,5,5,-596" Grid.RowSpan="11" Height="829" SelectedItemChanged="DAPITreeView_SelectedItemChanged" >
     <TreeView.ItemContainerStyle>
         <Style TargetType="{x:Type TreeViewItem}">
             <Setter Property="IsExpanded" Value="True"/>
         </Style>
     </TreeView.ItemContainerStyle>
 </TreeView>

Ниже приведен мой TreeView.xaml.cs:
private void LoadTreeView(string filename)
{
    XmlDocument doc = new XmlDocument();
    try
    {
        doc.Load(filename + ".xml");
    }
    catch (Exception Err)
    {
        System.Windows.Forms.MessageBox.Show(Err.Message);
        return;
    }

    ConvertXmlNodeToTreeNode(doc, DAPITreeView.Items);
    //Tree View Expand All to be Done
}

private void ConvertXmlNodeToTreeNode(XmlNode xmlNode, ItemCollection itemCollection)
{
    TreeViewItem newTreeViewItem = null;

    switch (xmlNode.NodeType)
    {
        case XmlNodeType.ProcessingInstruction:
        case XmlNodeType.XmlDeclaration:
            break;
        case XmlNodeType.Element:
            {
                newTreeViewItem = new TreeViewItem();
                newTreeViewItem.Items.Add(xmlNode.Name);
                itemCollection.Add(newTreeViewItem);    //TreeView not updated here
            }
            break;
        case XmlNodeType.Comment:
            {
                newTreeViewItem = new TreeViewItem();
                newTreeViewItem.Items.Add(xmlNode.Name);
                newTreeViewItem = new TreeViewItem();
                newTreeViewItem.Items.Add("<!--" + xmlNode.Value + "-->");
            }
            break;
    }

    if (xmlNode.Name == "message")
    {
        if (xmlNode.ChildNodes.Count > 0)
        {
            newTreeViewItem = new TreeViewItem();
            newTreeViewItem.Items.Add("dummy");
        }
        return ;
    }
    foreach (XmlNode childNode in xmlNode.ChildNodes)
    {
        if (newTreeViewItem == null)
        {
            newTreeViewItem = new TreeViewItem();
            itemCollection.Add(xmlNode.Name);        //Only item added to TreeView as #document.
            newTreeViewItem.Items.Add(xmlNode.Name);
        }
        ConvertXmlNodeToTreeNode(childNode, newTreeViewItem.Items);
    }
}


Can anyone suggest me what is missing or needs correction?


Что я уже пробовал:

Я ссылался на многие блоги, но не нашел правильного решения для этой проблемы.

Graeme_Grant

"TreeView не обновляется/ не показывает узлы"

Научились ли вы сначала работать с элементом управления TreeView в макете/прототипе, прежде чем пытаться его использовать? Вы понимаете, как использовать отладчик для проверки правильности установки данных?

Если вы используете модель data-first, а не UI-first, как указано в приведенном выше коде, то с элементом управления TreeView работать гораздо проще. Взгляните на эту статью проекта кода: Упрощение в WPF TreeView элемент с помощью шаблона модель представления [^]

1 Ответов

Рейтинг:
4

MrutyunjayS

Found the correction. Thanks for the comments.
newTreeViewItem.Header = ("dummy");
//newTreeViewItem.Items.Add("dummy");