如何将 class 绑定到 code-behind 中的 TabItem DataContext

How to bind a class to a TabItem DataContext in code-behind

我有一个名为 TabViewModel 的 class,它具有名称等属性。

我需要能够动态添加选项卡,每当添加新选项卡时,我都需要创建一个新的 TabViewModel 实例并将其绑定到新选项卡。

这是我的代码:

XAML:

            <TabControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}"/>
                </DataTemplate>
            </TabControl.ItemTemplate>

背后的代码: 添加新标签时..

_tabItems = new List<TabItem>();    
tabItem.DataContext = ViewModel.CreateNewTabViewModel();    
_tabItems.Add(tabItem);    
TabControl1.ItemsSource = _tabItems;    
TabControl1.SelectedIndex = 0;

因此,CreateNewTabViewModel 假设创建一个新的 TabViewModel 并设置要在选项卡 header 上显示的名称 属性,这就是 TextBlock 绑定到名称的原因。

我也试过tabItem.SetBinding但是没用。

请指教

谢谢!

_tabItems = new List<TabItem>();    
//...
_tabItems.Add(tabItem);    
TabControl1.ItemsSource = _tabItems;      

用仅包含一个选项卡项的新列表替换整个选项卡项列表。

就是说,代码并不清楚它在做什么,很多似乎都不需要。这有效:

var tabItems = new List<TabViewModel>();
tabItems.Add(new TabViewModel { Name = "MyFirstTab" });
myTabControl.ItemsSource = tabItems;
myTabControl.SelectedIndex = 0;

您需要做的就是将视图模型的实例添加到视图模型列表并指向选项卡控件以使用它。无需设置数据上下文;通过设置项目源,您将每个选项卡的数据上下文隐式设置为集合中的项目。