Док-станция Avalon 2.0 в TabItem не загружается

У меня есть требование загрузить элемент управления avalondock [1] внутри каждой вкладки элемента управления вкладками.

[1] – http://avalondock.codeplex.com/wikipage?title=AvalonDock%202.0%20Getting%20Start%20Guide

Прежде чем усложнять это, я написал простое приложение poc, чтобы просто загружать tabItems из моей модели просмотра и загружать элемент управления док-станцией на каждой вкладке, xaml ниже...

<TabControl ItemsSource="{Binding TabItems}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Header}" />
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <!--<TextBlock Text="{Binding Content}" />-->
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition/>
                    <RowDefinition/>
                </Grid.RowDefinitions>

                <TextBlock Grid.Row="0" Text="{Binding Content}"></TextBlock>
                <xcad:DockingManager Grid.Row="1" x:Name="dockingManager" VerticalAlignment="Top" Background="Red"  Width="500" Height="500" >
                    <xcad:LayoutRoot>
                        <xcad:LayoutPanel Orientation="Horizontal">
                            <xcad:LayoutDocumentPane>
                                <xcad:LayoutDocument Title="Document 1">
                                    <TextBlock x:Name="dockTextBlock" Background="Green" VerticalAlignment="Top" Text="Hello World"></TextBlock>
                                </xcad:LayoutDocument>
                            </xcad:LayoutDocumentPane>
                        </xcad:LayoutPanel>
                    </xcad:LayoutRoot>
                </xcad:DockingManager>
            </Grid>
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>

Моя модель просмотра передает следующее...

TabItems = new ObservableCollection<TabItem>()
{
    new TabItem(){Header  = "Tab 1", Content = "I am tab 1"},
    new TabItem(){Header = "Tab 2", Content = "I am tab 2"}
};

private ObservableCollection<TabItem> _tabItems;

public ObservableCollection<TabItem> TabItems
{
    get { return _tabItems; }
    set
    {
        _tabItems = value;
        RaisePropertyChanged(() => TabItems);
    }

}

Элементы вкладки загружаются правильно, и я вижу содержимое, но dockcontrol не загружается, я ожидал увидеть dockcontrol с текстовым полем Hello World на каждой вкладке. Явно что-то упускаю.

Кто-то сталкивался с этим? Это проблема контекста данных? Есть предположения?


person Tarun Arora    schedule 20.01.2014    source источник


Ответы (1)


Я нашел решение для этого, это было не так сложно, как я. Хотя заслуга элемента управления Avalondock в разработке элемента управления, учитывающего это решение.

Я получил свою идею и реализацию из этого примера проекта кода http://www.codeproject.com/Articles/483533/AvalonDock-2-0-Tutorial-Part-2-Adding-a-Start-Page

person Tarun Arora    schedule 27.01.2014