2012-06-29 3 views
1

В моем приложении, как только объект выпал на холсте, я сохранил его в дереве. Теперь я пытаюсь написать метод для удаления объекта, который хорош, но мне также нужно удалить этот конкретный объект из дерева. Каждый объект имеет уникальный идентификатор, поэтому я могу найти его в дереве и удалить его из дерева при удалении с холста.Обновление управления древовидной структурой в WPF

Для того, чтобы найти узел в дереве я планировал хранить ID в каждом узле (item.Tag), однако, я столкнулся с двумя проблемами:

  1. Как я могу получить доступ к деталям узел из другого класса? myTreeObj.Items.Tag работает неправильно.

  2. Когда я петлю в дереве myTreeObj.Items.Count показывает больше предметов, что я вижу.

Любые комментарии будут оценены.

Спасибо.

ответ

0

В WPF TreeViews на самом деле являются тем, что они говорят: вид структуры данных. В WinForms вам нужно было сканировать вверх и вниз узлы TreeView и добавлять их или удалять их вручную. В WPF правильный подход заключается в том, чтобы добавлять или удалять элементы из фактической иерархии данных (к которой привязывается TreeView) и использовать уведомления PropertyChanged или CollectionChanged, чтобы сообщить TreeView автоматически обновить себя автоматически.

То, что вы пытаетесь сделать, может быть возможно, но это будет полный бой, и все будет работать не так, как ожидалось. WPF REALY хочет, чтобы вы использовали привязку данных, и любой другой подход даст вам головные боли.

Эта статья может быть полезна для начала понять, как работать с TreeView WPF: http://joshsmithonwpf.wordpress.com/2008/05/24/the-wpf-treeview-is-a-view-of-a-tree/

EDIT: оригинальная статья автора на самом деле более полезным: http://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode

+0

Вы правы. мне пора понять концепцию. Является ли MVVM частью этого процесса? Спасибо! –

+0

@amitkohan - Трудно переходить из WinForms в WPF, потому что WPF вводит так много новых концепций одновременно. Это помогает думать о пользовательском интерфейсе, как о тупой вещи, которая просто подключается к ViewModel. ViewModel - это место, где все происходит, но очень абстрактным образом. Тема слишком сложна, чтобы войти в поток комментариев stackoverflow, но вторая ссылка, упомянутая выше, должна помочь вам приступить к работе. – JDB

+0

Да, это правильно, но прежде, чем я перейду к статье о CodeProject, я столкнулся с этой ссылкой и надеялся дать мне простой/быстрый учебник http://www.skycoder.com/Articles/Article_77/Default.aspx однако, кажется неполным ... в наши дни найти хорошую статью WPF или даже пошаговый пример жестко. После его завершения я получаю сообщение об ошибке ** Непоследовательная доступность: базовый класс «System.Collections.ObjectModel.ObservableCollection » менее доступен, чем класс «myWPFTree.Nodes» ** –

Смежные вопросы