У меня есть TreeView, который связан через HierarchicalDataTemplate. Я перечисляю там список, который содержит список каталогов и файлов.
private void getDirectoryList()
{
using (FileOperations fileOP = new FileOperations())
{
this.DokumentBrowser.ItemsSource = fileOP.list_directory(rpath); //Liste wird an den DokumentenBrowser gebunden
selectedOrdner = (Ordner)DokumentBrowser.Items.GetItemAt(0);
this.FileBrowser.DataContext = selectedOrdner.FileName;
}
}
selectedOrdner буферизует объект Ordner, который фактически выбран пользователем в TreeView. Если он пуст, он устанавливается на элемент в позиции 0, которая является корневым каталогом. Когда теперь пользователь помещает новый файл в TreeView
runMethodtoCopyFile
getDirectoryList();
TreeViewItem tvi = (TreeViewItem)DokumentBrowser.ItemContainerGenerator.ContainerFromItem(DokumentBrowser.Items.CurrentItem);
tvi.IsExpanded = true;
tvi.Focus();
Я запускаю метод, чтобы скопировать файл, а затем я читаю новую структуру каталогов и хочу установить для свойства расширения значение true из последнего выбранного элемента дерева. Потому что мой TreeView всегда показывал мне мой rootnode, когда я помещал в него новый файл или каталог.
Буфер selectedOrdner содержит до тех пор, пока я не помещаю в него новый файл Ordner Object. Но когда я запускаю метод для копирования файла, он больше не содержит объект типа Ordner, а вместо этого treeviewitem.
Я не понимаю, где он изменяется с типа Ordner на тип TreeViewItem.
редактировать -----
Ошибка всегда происходит, когда происходит TreeView SelectedItemChanged.
private void DokumentBrowser_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
selectedOrdner = (Ordner)DokumentBrowser.SelectedItem;
FileBrowser.ItemsSource = selectedOrdner.FileName;
}
Когда я пытаюсь добавить что-то к корневому узлу, оно работает нормально, это только узлы после первого, где оно начинает ломаться.
edit2 ------
При привязывании древовидного представления к новому источнику элементов возникла проблема, связанная с тем, что метод selecteditemchange имеет отключенный элемент, который нельзя преобразовать в (Ordner)
решил эту проблему, внеся все изменения в наблюдаемую коллекцию. Таким образом, TreeViewItem расширен, больше не нужен