我在主窗口中有这段代码:
<TabControl x:Name="tc" Margin="0" SelectedIndex="0">
<TabItem Header="Tab 1" Width="150"
IsSelected="false">
<!--<TextBox Width="200" Height="200"/>-->
</TabItem>
</TabControl>
我有一个mainwindowviewmodel,我希望它绑定到控制选项名称,即tc:
private void AddTab_Execute(object parm)
{
s = s + 1;
TabItem Item = new TabItem();
Item.Width = 150;
Item.Header = "Tab " + s;
tc.Items.Add(Item);
}
他不认识tc
我该怎么做?
答案 0 :(得分:4)
这与binding无关,但如果你有一个更容易。您不需要像视图模型中的TabControl
那样引用控件。
将TabControl的ItemsSource
绑定到ObservableCollection
,然后您只需要向该集合添加项目。使用ItemTemplate
(标题)和ContentTemplate
(标签项内容)动态地从collecton中的项目创建标签。
答案 1 :(得分:2)
首先,要小心你如何使用“绑定”这个词。这有一个特殊的含义,而不是你在你的例子中所做的。要查看绑定的实际含义,请查看this article。
您无法从viewmodel访问UI中的控件。您应该做的是将TabControl的ItemsSource绑定到viewmodel中的集合。如果要根据绑定到每个TabItem的项目选择不同的模板,可以创建DataTemplateSelectors并将其用于TabControl的ContentTemplateSelector和ItemTemplateSelector。