Каждый раз, когда вы идете по дереву визуалов, вы должны серьезно задуматься о построении модели вида.
модель представления может расширить функциональность древовидных представлений, не беспокоясь о проблемах, с которыми вы сталкиваетесь.
Модель представления для вашего приложения будет иметь несколько дополнительных свойств
IsSelected
IsExpanded
IsHighlighted
а также ваш
Data
тогда вы привязали бы (используя ItemContainerStyle) IsSelected, IsHighlighted и IsExpanded к TreeViewItem, затем, когда у вас была коллекция этих моделей представлений, вы могли бы выполнить поиск по модели представления и просто установить свойство IsHighlighted. Затем модель представления ответит и из-за привязки к стилю выделит элемент дерева, если вы хотите. Это также может сделать такие вещи, как расширение всех узлов выше. Представление дерева ответило бы на это.
Модель представления в сочетании с древовидным представлением дает гораздо большую гибкость и останавливает те визуальные упражнения по ползанию по дереву (которые являются хаком и чувствуют себя грязными)
Вот хорошая статья о ViewModel и TreeView ...