【发布时间】:2014-10-29 07:36:49
【问题描述】:
我在 xaml 中有这样的:
<controls:TabControl Grid.Row="0" BorderThickness="0" Background="White"
ItemsSource="{Binding TabList, Mode=TwoWay, Converter={StaticResource TabConverter}}"
SelectedItem="{Binding CurrentItem, Mode=TwoWay}"/>
在视图模型中我有:
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(version);它会添加到 TabList 中。
问题是当我单击 CurrentItem(动态创建的 TabItems (TabList) 数量)时,它会给出非常大的奇怪地址(如 222557456)。
我获取当前项目索引的方法是错误的吗? (int index = currentItem.TabIndex;) ?
【问题讨论】:
-
TabIndex不是选项卡的索引 - 它用于在按 TAB 键在控件之间循环时对控件进行排序。 -
TabIndex 并不意味着 TabControl 内的项目索引。由于您有一个 ViewModel 列表,SelectedItem 可能不会返回 TabItem,它应该是指绑定到当前TabItem的ViewModel。所以你可以试试这个TabList.IndexOf(CurrentItem)。
-
@Luaan 那么如何在这里解决该解决方案以了解在 CurrentItem 集合内单击的当前项目的索引?
-
@Claw 执行 siad 给出的操作:错误参数 1:无法从 'System.Windows.Controls.TabItem' 转换为 'ViewModel.ProgramVersionItemViewModel'
-
您只需将
Tag属性设置为pv,然后当您想阅读它时,只需进行显式转换-(ProgramVersion)currentItem.Tag。
标签: c# .net xaml tabcontrol tabitem