我有这样的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;)?
答案 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()});
}
}