TabItem动态绑定内容

时间:2018-07-29 19:25:52

标签: c# wpf xaml

尝试动态构建TabControl,但不会绑定我创建的UserControl。我已经扩展了TabItem,以向标题添加一些关闭功能。

它给出的错误是:

System.Windows.Data Error: 26 : ItemTemplate and ItemTemplateSelector are ignored for items already of the ItemsControl's container type; Type='ClosableTab'

我最终得到了纯文本而不是控件的System.Windows.Controls.Grid。 UserControl只是在一个空网格中包含一个TextBlock,用于测试。

该错误与以下问题非常相似:Data Error 26 with DataTemplate and ItemTemplate,但是我的代码不同,因此我无法弄清楚是否相同,但是我尝试进行搜索。

此代码包含来自多个教程的内容,但我仍然只有一个月的时间,如果我错过了明显的内容,对不起。

<TabControl TabStripPlacement="Top"
            ItemsSource="{Binding Titles, Mode=TwoWay}"
            Grid.Column="3" Grid.Row="1">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Header}" />
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Content}" />
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

扩展的TabItem类。 TabHeader只是Xaml,用于向标题添加关闭按钮,效果很好。 {Binding Content}确实显示警告,

Cannot resolve property 'Content' in data context of type MyApp.ViewModel.MainWindowViewModel

也许这是关键吗?

public class ClosableTab : TabItem
{
    public ClosableTab(string headerText, UserControl content)
    {
        TabHeader header = new TabHeader();
        Header = header;
        Title = headerText;
        Content = content;
    }

    public string Title
    {
        get { return Title.ToString(); }
        set
        {
            ((TabHeader)this.Header).label_TabTitle.Content = value;
        }
    }
}

ICommand事件处理程序

private ObservableCollection<ClosableTab> _titles; 

public ObservableCollection<ClosableTab> Titles
{
    get { return _titles; }
    set
    {
        _titles = value;
        OnPropertyChanged("Titles");
    }
}

private void AddTabItem(string title)
{
    ClosableTab Item;
    Item = new ClosableTab("Setup", new Setup());
    Titles.Add(Item);
    Item.Focus();
    OnPropertyChanged("Titles");
}

New Setup()是一个仅包含网格和文本块的用户控件。

一切正常,标题是用标题和关闭按钮构建的,但是内容仅返回文本System.Windows.Controls.Grid?

1 个答案:

答案 0 :(得分:0)

<TabControl.ContentTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding Content}" />
    </DataTemplate>
</TabControl.ContentTemplate>

TextBlock ...我不是个聪明人。