如何显示选项卡的视图?

How to display a view for the tab?

我的主视图模型中有一组选项卡。每个选项卡都由具有多个属性的 class 表示:

class SettingTab : ISettingTab
{
    public string Name { get; }

    readonly UIInfo UIInfo;
    public Type TypeView => UIInfo.TypeView;

    public Func<IViewModel> ViewModel => UIInfo.ViewModel;
    #endregion

    #region Constructor

    public SettingTab(string Name, UIInfo UIInfo)
    {
        this.Name = Name;
        this.UIInfo = UIInfo;
    }
}

}

如何在选择特定选项卡时显示特定视图? 你能说我应该在这里添加什么吗

<TabControl ItemsSource="{Binding Tabs}"
        TabStripPlacement="Left"
        SelectedIndex="{Binding SelectedIndex}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
</TabControl>

TabControl 显示 TabItem 元素列表、选项卡 headers 和引用所选项目 TabItem.ContentTabControl.SelectedContent , 作为实际的选项卡内容。
默认情况下,TabItem.ContentTabItemDataContext - 在您的情况下,它是 Tab 数据模型。
这意味着,TabControl.ItemtemplateDataTemplateTabControl.ContentTemplate 默认共享相同的 DataContext
如果您想更改此默认行为,例如,将此 DataContext 上的特定 属性 作为 TabControl.SelectedContent,您必须在 TabControl.ItemContainersStyle 中指定此绑定。

例如,如果您的每个 Tab 数据项都有一个 Tab.ViewModel 属性 要显示为 TabControl.SelectedContent,则绑定 TabItem.Content 属性 这个 Tab.ViewModel 数据 属性。此外,您必须为 Tab.ViewModel 属性 的数据类型定义 TabControl.ContentTemplate 以定义 TabControl.SelectedContent:

的布局
<TabControl ItemsSource="{Binding Tabs}">
  <TabControl.Resources>

    <!-- Implicit DataTemplate for TabControl's content -->
    <DataTemplate DataType="{x:Type TypeOfTheViewModelPropertyOnTheTabType}">
      ...
    </DataTemplate>
  </TabControl.Resources>
  <TabControl.ItemContainerStyle>
    <Style TargetType="TabItem">

      <!-- Make the property value of 'Tab.ViewModel' the DataContext of the content -->
      <Setter Property="Content" Value="{Binding ViewModel}" />
    </Style>
  </TabControl.ItemContainerStyle>

  <TabControl.ItemTemplate>
    <DataTemplate DataType="{x:Type Tab}">
      <TextBlock Text="{Binding Name}" />
    </DataTemplate>
  </TabControl.ItemTemplate>
</TabControl>