如何显示选项卡的视图?
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.Content
的 TabControl.SelectedContent
, 作为实际的选项卡内容。
默认情况下,TabItem.Content
是 TabItem
的 DataContext
- 在您的情况下,它是 Tab
数据模型。
这意味着,TabControl.Itemtemplate
的 DataTemplate
和 TabControl.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>
我的主视图模型中有一组选项卡。每个选项卡都由具有多个属性的 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.Content
的 TabControl.SelectedContent
, 作为实际的选项卡内容。
默认情况下,TabItem.Content
是 TabItem
的 DataContext
- 在您的情况下,它是 Tab
数据模型。
这意味着,TabControl.Itemtemplate
的 DataTemplate
和 TabControl.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>