绑定控件名称问题

时间:2011-09-21 17:57:20

标签: c# .net wpf xaml

我在主窗口中有这段代码:

<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 我该怎么做?

2 个答案:

答案 0 :(得分:4)

这与binding无关,但如果你有一个更容易。您不需要像视图模型中的TabControl那样引用控件。

将TabControl的ItemsSource绑定到ObservableCollection,然后您只需要向该集合添加项目。使用ItemTemplate(标题)和ContentTemplate(标签项内容)动态地从collecton中的项目创建标签。

答案 1 :(得分:2)

首先,要小心你如何使用“绑定”这个词。这有一个特殊的含义,而不是你在你的例子中所做的。要查看绑定的实际含义,请查看this article

您无法从viewmodel访问UI中的控件。您应该做的是将TabControl的ItemsSource绑定到viewmodel中的集合。如果要根据绑定到每个TabItem的项目选择不同的模板,可以创建DataTemplateSelectors并将其用于TabControl的ContentTemplateSelectorItemTemplateSelector