2012-02-08 2 views
0

Заголовок охватывает его. Я должен просто делать что-то неправильно, но каждый пример, который я видел до сих пор, не добавляет элементы по-разному, насколько я могу судить. Исключение составляетДобавление TreeViewItems в TreeView в WPF приводит к исключению

«InvalidOperationException»

с сообщением

«Элемент уже есть логический родительский элемент. Он должен быть отделен от старого родителя, прежде чем он присоединен к новому.»

Я использую два TreeViews, один для отображения содержимого исходной папки, и один для отображения содержимого папки назначения. До сих пор кажется, что генерация TreeViewItem работает нормально, но добавление ее в TreeView вызывает исключение. Вот код:

public InstallerWindow(string sourcePath, string destPath, List<InstallInstruction> instructions) 
{ 
    InitializeComponent(); 

    TreeViewItem sourceItem = GenerateTreeView(new TreeViewItem(), sourcePath); 
    foreach (TreeViewItem item in sourceItem.Items) 
    { 
     SourceTree.Items.Add(item); 
    } 

    TreeViewItem destItem = GenerateTreeView(new TreeViewItem(), destPath); 
    foreach (TreeViewItem item in destItem.Items) 
    { 
     DestTree.Items.Add(item); 
    } 
} 

public TreeViewItem GenerateTreeView(TreeViewItem parent, string directory) 
{ 
    string[] directories = Directory.GetDirectories(directory); 
    string[] files = Directory.GetFiles(directory); 

    foreach (string file in files) 
    { 
     TreeViewItem newItem = new TreeViewItem(); 
     newItem.Header = System.IO.Path.GetFileName(file); 
     parent.Items.Add(newItem); 
    } 

    foreach (string folder in directories) 
    { 
     TreeViewItem newItem = new TreeViewItem(); 
     newItem.Header = System.IO.Path.GetFileName(folder); 
     newItem = GenerateTreeView(newItem, folder); 
     parent.Items.Add(newItem); 
    } 

    return parent; 
} 

Как всегда, любое понимание очень ценится :)

ответ

0

В GenerateTreeView добавить некоторые элементы в parent TreeViewItem. Затем в конструкторе InstallerWindow вы перебираете эти элементы и добавляете их в другое TreeView, например. SourceTree. Это не может работать, поскольку элементы могут содержаться только в одном TreeView.

Возможно, вы намереваетесь это?

public InstallerWindow(string sourcePath, string destPath, List<InstallInstruction> instructions) 
{ 
    InitializeComponent(); 

    GenerateTreeView(SourceTree.Items, sourcePath)); 
    GenerateTreeView(DestTree.Items, destPath)); 
} 
Смежные вопросы