TabControl - 数据绑定 TabItem 顺序

Posted

技术标签:

【中文标题】TabControl - 数据绑定 TabItem 顺序【英文标题】:TabControl - databinding TabItem order 【发布时间】:2012-03-26 17:52:06 【问题描述】:

我有一个数据绑定的 TabControl,并希望将每个 TabItem 的索引绑定到我的视图模型中的相应属性。 ItemsSource 是一个 ObservableCollection,我使用Bea Stollnitz's Drag/Drop functionality 提供选项卡控件重新排序。

我的直觉是它应该可以在选项卡项标题的数据模板中处理,但我无法让它工作。

【问题讨论】:

【参考方案1】:

您的TabControl.ItemsSource 应该绑定到您的集合,因此要重新排列选项卡项的顺序,只需重新排列集合即可。

我之前使用 Bea 的拖放代码创建了一个允许用户拖放选项卡项目的 TabControl,我认为大部分需要的是她提供的代码。放置时,它会从其父集合中删除拖动的对象,并将其插入到放置目标集合中的新位置,在您的情况下,它是同一个集合。

编辑

根据您在下面关于使用标签索引更新您的ViewModel 的评论,请尝试使用CollectionChanged 事件。

void MyCollection_CollectionChanged(object sender, CollectionChangedEventArgs e)

    foreach (var item in MyCollection)
        item.TabIndex = MyCollection.IndexOf(item);

【讨论】:

是的,我有它的那部分工作,它正确地重新排序选项卡,但我没有任何方法来更新刚刚移动的选项卡的视图模型指数。换句话说,TabControl.ItemsSource 是 ObservableCollection。在 MyItem 类中,我有一个 TabSequence 属性。当我重新排序选项卡时,我需要使用新的选项卡索引更新 TabSequence 属性。 @ZF 您应该能够挂钩CollectionChanged 事件并更新每个项目的TabSequence。我已经用一个例子更新了我的答案。 完美,我什至没有考虑 CollectionChanged 事件。谢谢!

以上是关于TabControl - 数据绑定 TabItem 顺序的主要内容,如果未能解决你的问题,请参考以下文章

WPF Adorner 在TabControl切换TabItem时消失

使用 MVVM 将新项目添加到 TabControl ItemSsource 时选择最后一个 TabItem

放置在 tabcontrol 的第二个 tabitem 中的数据网格的 WPF-'Index out of Range' 错误(但如果放置在第一个 tabitem 中,它工作正常)

如何将 TabControl 绑定到 ViewModel 集合?

如何在没有单击事件的情况下使特定的 TabItem 获得对 TabControl 的关注?

WPF TabControl 覆盖 TabItem 背景?