在上图中,child 是 ContentPresenter。它的内容是一个 ViewModel。但是,它的 ContentTemplate 为空。
在我的 XAML 中,我有一个 TabControl 具有以下结构:
<local:SuperTabControlEx DataContext="{Binding WorkSpaceListViewModel}"
x:Name="superTabControl1" CloseButtonVisibility="Visible" TabStyle="OneNote2007" ClipToBounds="False" ContentInnerBorderBrush="Red" FontSize="24" >
<local:SuperTabControlEx.ItemsSource>
<Binding Path="WorkSpaceViewModels" />
</local:SuperTabControlEx.ItemsSource>
<TabControl.Template>
<ControlTemplate
TargetType="TabControl">
<DockPanel>
<TabPanel
DockPanel.Dock="Top"
IsItemsHost="True" />
<Grid
DockPanel.Dock="Bottom"
x:Name="PART_ItemsHolder" />
</DockPanel>
<!-- no content presenter -->
</ControlTemplate>
</TabControl.Template>
<TabControl.Resources>
<DataTemplate DataType="{x:Type vm:WorkSpaceViewModel}">
....
WorkSpaceViewModels 是 WorkSpaceViewModel 的 ObservableCollection。此代码使用Keeping the WPF Tab Control from destroying its children中的代码和技术。
正确的 DataTemplate - 上面显示在 TabControl.Resource 中 - 似乎正在为两个选项卡呈现我的 ViewModel。
但是,我的基本问题是,我的视图如何连接到我的 WorkSpaceViewModel,然而,ContentPresenter 上的 ContentTemplate 为空?我的要求是从 ViewModel 访问可视组件,因为在某些用户操作后,视图的设置与 ViewModel 中的属性解除绑定,我需要重新绑定它。