如何知道动态创建的TabItem的索引

时间:2014-09-04 13:58:34

标签: c# .net xaml tabcontrol tabitem

我有这样的xaml:

<controls:TabControl Grid.Row="0" BorderThickness="0" Background="White" 
                         ItemsSource="{Binding TabList, Mode=TwoWay, Converter={StaticResource TabConverter}}"                        
                         SelectedItem="{Binding CurrentItem, Mode=TwoWay}"/>

在viewmodel中我有:

 private TabItem currentItem;
    public TabItem CurrentItem
    {
        get { return currentItem; }
        set 
        {
            //currentItem.Content               
            currentItem = value;
          int index = currentItem.TabIndex;  //IT GIVES STRANgE INDEX ON DEBUGGING ob Tab click (like 22255788586)                   
            OnPropertyChanged("CurrentItem");
        }
    }

但是这个TabList(在xaml中)是动态生成的:

public void AddVersion(ProgramVersion pv) //it creates the TabList
        {
            if (pv != null)
            {               
                if (index == -1)
                {                      
                    TabList.Add(new ProgramVersionItemViewModel(pv));                    
                    OnPropertyChanged("TabList");                
                }                
            }
        }

每次按下按钮我都会调用AddVersion(版本)功能;它将添加在TabList中。

问题是当我点击CurrentItem(动态创建的TabItems数量(TabList))然后它给出了非常大的奇怪地址(如222557456)。

我的方式是获取当前项目的索引是错误的吗? (int index = currentItem.TabIndex;)?

1 个答案:

答案 0 :(得分:0)

说实话,这是一种做法。这可能是一个更好的解决方案:

    private void Button1_Click(object sender, RoutedEventArgs e)
    {
        TabControl1.Items.Add(new TabItem() { TabIndex = 0, Header = "Tab 0" });
        TabControl1.Items.Add(new TabItem() { TabIndex = 1, Header = "Tab 1" });
        TabControl1.Items.Add(new TabItem() { TabIndex = 2, Header = "Tab 2" });
        TabControl1.Items.Add(new TabItem() { TabIndex = 3, Header = "Tab 3" });
    }

请注意,我们正在添加new TabItem()并为其提供标签索引和标头。使用这种方法更具动态性和可靠性。

因此,在您的示例中,您可能会执行以下操作:

        if (pv != null)
        {
            if (index == -1)
            {
                TabList.Add(new TabItem() { TabIndex = <EnumeratedValue>, Header = "Tab " + <EnumeratedValue>.ToString()});
            }
        }