WPF C # Развернуть фактический TreeNode неверное приведение - PullRequest
0 голосов
/ 23 августа 2010

У меня есть 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 расширен, больше не нужен

1 Ответ

0 голосов
/ 07 сентября 2010

Принесите XAML на свет, пожалуйста! )) При нынешнем состоянии расследования сложно что-то сказать. Может быть проблема с привязкой где-то в вашем HierarchicalDataTemplate или это может быть другой фрагмент вашего кода. Единственное, что я могу сказать сейчас - вам лучше проверить все ваши ссылки с / на SelectedItem как в частях кода WPF XAML, так и в C #.

П.С .: Кстати, очень странно - обычно людей путают с проблемой коллег, как получить TreeViewItem для SelectedItem.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...