我认为我在寻找的是MVVM,但我看过的示例并没有帮助,因此基于我的问题的示例应该可以提供帮助。我已经有了TabControl中的内容,所以我一直无法使用TabControl.ItemsSource = CourtCases
,因为它会引发异常;TabControl将ItemsSource绑定到带有现有TabItem的列表
Items collection must be empty before using ItemsSource.
...和使用可能需要更多的工作,因为一些标签将不得不关闭。
我有一个TabControl,其中第一个选项卡包含一个DataGrid与人员列表,我希望每当在DataGrid中单击一个项目时,会创建一个包含该人员详细信息的新选项卡。我想将人物对象传递给TabItem“范围/类”,并显示该人的内容。我为人物详细信息TabItem创建了一个DataTemplate
,您可以在下面看到它;
<TabControl Name="AttorneysTabControl" Grid.Column="2" Grid.Row="0">
<TabControl.Resources>
<DataTemplate x:Key="AttorneyTabHeader">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Attorney.Names}" Margin="2,0,0,0" FontSize="16" VerticalAlignment="Center" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="AttorneyTabContent">
<StackPanel>
<TextBlock Text="{Binding Attorney.Names}" />
<TextBlock Text="{Binding Attorney.Age}"/>
<ToolBar>
<Button ToolTip="">Delete</Button>
<Button ToolTip="">Edit</Button>
</ToolBar>
</StackPanel>
</DataTemplate>
</TabControl.Resources>
<TabItem>
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Attorneys" Margin="2,0,0,0" FontSize="16" VerticalAlignment="Center" />
</StackPanel>
</TabItem.Header>
<TabItem.Content>
<Grid Background="#FFE5E5E5" Height="Auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="5" />
<ColumnDefinition Width="3*" />
</Grid.ColumnDefinitions>
...
</Grid>
</TabItem.Content>
</TabItem>
<!-- This part here -->
<!-- I want this to repeat. I think I should use a UserControl for this since I want the content to have it's own class -->
<TabItem ContentTemplate="{StaticResource AttorneyTabContent}" HeaderTemplate="{StaticResource AttorneyTabHeader}" />
</TabControl>
查看主 - 细节绑定。这是一个[SAMPLE](https://code.msdn.microsoft.com/windowsdesktop/CSWPFMasterDetailBinding-c78566ae)。 – jsanalytics
你正试图以一种他们真正没有设计的方式来使用控件。在这种情况下,您应该将控件包装在UserControl中,然后公开您自己的ItemsSource DP,并在代码隐藏中手动管理选项卡。 – Will
是的,这就是我所做的。我意识到这是不可能的。 – LogicDev