WPF - Treeview 选定项索引

WPF - Treeview selected item index

我有一个树视图面板。在面板中,有几个 child 节点。有的只是一个header.

我创建树视图的方式:

treeviewpaneL.Items.Add(art);
art.Items.Add(prt);

some if statement....

TreeViewItem cldhdr = new TreeViewItem() { Header = "ChildNodes:" };
prt.Items.Add(cldhdr);
TreeViewItem cld = new TreeViewItem() .......
........
.....
cldhdr.Items.Add(cld);

树视图:

Node1
  ChildNodes:           (This is header only.  It appears if child node exists)
   Childnode1
   Childnode2
   childnode3

Node2
Node3
  ChildNodes:           
   Childnode1
   Childnode2
   childnode3

Node4
Node5

在我的树视图中,所有节点前面也有图像。这是一个代码驱动的树视图。在 xaml 部分我只有:

<TreeView x:Name="treeviewpaneL" SelectedItemChanged="treeviewpaneL_SelectedItemChanged" >
                    </TreeView>

我想做的是当我点击任何树视图项目时,我需要获取它的索引号。

我的代码是:

private void treeviewpaneL_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {

 int index = 0;
 ItemsControl parent = ItemsControl.ItemsControlFromItemContainer(prt);


foreach (var _item in parent.Items)
        {


            if (_item == treeviewpaneL.SelectedItem)
            {
                selectedNodeIndex = index;
                MessageBox.Show(selectedNodeIndex.ToString());
                break;
            }
            index++;
        }
 } 

通过上面的代码,我可以得到Node1、Node2、Node3、Node4和Node5的索引为0,1,2,3,4

我想要的是获取索引号:

Node1  = 0
Childnode1 = 1       (Skipping the header)
Childnode2 = 2
Childnode3 = 3
Node2  = 4
....
....
....

我错过了什么?

这是解决方案,首先是你的 "MyTreeViewItem"

public class MyTreeViewItem :TreeViewItem
{
    private int _index;
    public int Index
    {
        get { return _index; }
        set { _index = value; }
    }

    public MyTreeViewItem() : base() 
    {

    }
}

和用法;

            MyTreeViewItem art = new MyTreeViewItem();
            art.Header = "Node1";
            art.Index = 1; 


            MyTreeViewItem prt = new MyTreeViewItem();
            prt.Header = "Child1";
            prt.Index = 2;


            art.Items.Add(prt);


            treeviewpaneL.Items.Add(art); 

和事件;

  private void treeviewpaneL_SelectedItemChanged(object sender,   RoutedPropertyChangedEventArgs<object> e)
        {
            MyTreeViewItem selectedItem = e.NewValue as MyTreeViewItem;
            if (selectedItem != null) 
            {
                MessageBox.Show("" + selectedItem.Index);

            }
        }

获取当前选中项的索引:

MyTreeView.Items.IndexOf(MyTreeView.SelectedItem);