К вашему сведению: вместо того, чтобы получить TreeViewItem, я считаю, что лучше включить ссылку на родителя в вашу модель, так же как в вашем классе узлов:
Node.Parent {get{return this._parent;}}
Тогда при создании вашей коллекции вы должны были бы установить значения, но это невероятно облегчает жизнь: представьте себе, что вы родитель для любой ступени:
myNode.Parent.Parent.Parent
Чтобы получить TreeViewItem: (из моего ответа здесь: Как получить TreeViewItem из элемента HierarchicalDataTemplate? )
Мне пришлось установить последний выбранный TreeViewItem в перенаправленном событии TreeViewItem.Selected, которое всплывает до представления дерева (сами TreeViewItem не существуют во время разработки, поскольку мы используем HierarchicalDataTemplate).
Событие может быть записано в XAML следующим образом:
Тогда последний выбранный TreeViewItem может быть установлен в событии следующим образом:
private void TreeViewItemSelected(object sender, RoutedEventArgs e)
{
TreeViewItem tvi = e.OriginalSource as TreeViewItem;
// set the last tree view item selected variable which may be used elsewhere as there is no other way I have found to obtain the TreeViewItem container (may be null)
this.lastSelectedTreeViewItem = tvi;
...
}