How to get TreeViewItem from HierarchicalDataTemplate item?

前端 未结 11 1414
失恋的感觉
失恋的感觉 2020-12-02 11:34

I have a TreeView which uses a HierarchicalDataTemplate to bind its data.

It looks like this:



        
11条回答
  •  渐次进展
    2020-12-02 12:03

    TreeViewItem item = (TreeViewItem)(mainTreeList
        .ItemContainerGenerator
        .ContainerFromIndex(mainTreeList.Items.CurrentPosition));
    

    DOES NOT WORK (for me) as mainTreeList.Items.CurrentPosition in a treeview using a HierarchicalDataTemplate will always be -1.

    NEITHER DOES below as as mainTreeList.Items.CurrentItem in a treeview using a HierarchicalDataTemplate will always be null.

    TreeViewItem item = (TreeViewItem)mainTreeList
        .ItemContainerGenerator
        .ContainerFromItem(mainTreeList.Items.CurrentItem);
    

    INSTEAD I had to set a the last selected TreeViewItem in the routed TreeViewItem.Selected event which bubbles up to the tree view (the TreeViewItem's themselves do not exist at design time as we are using a HierarchicalDataTemplate).

    The event can be captured in XAML as so:

     
    

    Then the last TreeViewItem selected can be set in the event as so:

        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;
    
            ...
         }
    

提交回复
热议问题