C# 使用绑定时如何在TabControl中保留选项卡

C# 使用绑定时如何在TabControl中保留选项卡,c#,wpf,tabcontrol,C#,Wpf,Tabcontrol,所以我有一个选项卡控件。我想将ItemsSource绑定到我的ViewModel集合,以便动态添加选项卡。比如: <TabControl ItemsSource="{Binding Path=Cities}"> <TabItem Header="Settings" x:Name="settingsTab" /> </TabControl> 其中城市是城市类型的可观测集合。但是,我希望第一个选项卡显示SettingsView。来自城市的项目应显示城

所以我有一个
选项卡控件
。我想将
ItemsSource
绑定到我的ViewModel集合,以便动态添加选项卡。比如:

<TabControl ItemsSource="{Binding Path=Cities}">
    <TabItem Header="Settings" x:Name="settingsTab" />
</TabControl>

其中
城市
城市
类型的
可观测集合
。但是,我希望第一个选项卡显示
SettingsView
。来自城市的项目应显示城市视图。tab控件只是一个导航面板,我基本上是尝试将
设置
放在第一个位置,然后是动态的城市数量


最优雅的解决方案是什么?我不希望使用包含设置模型和所有城市模型的随机集合污染我的视图模型。

如果不希望选项卡控件成为城市列表,则需要使用DataContext而不是ItemsSource。然后可以将cities对象绑定到TabItems内容中的列表视图

例如:

public class City
{
   public string Name {get;set;}
   public string SettingOne {get;set;}
   public string SettingTwo {get;set;}
}

<TabControl DataContext="{Binding Path=Cities}">
    <TabItem Header="Settings" x:Name="settingsTab">
        <TabItem.Content>
            <ListView ItemsSource="{Binding}">
                <ListView.ItemTemplate>
                    <TextBox Text="{Binding Path=SettingOne}"></TextBox>
                     ...
                 </ListView.ItemTemplate>
            </StackPanel>
        </TabItem.Content>
    </TabItem>
</TabControl>
公共级城市
{
公共字符串名称{get;set;}
公共字符串设置一{get;set;}
公共字符串设置两个{get;set;}
}
...

使用一个
复合集合
@HighCore我以前从未听说过这个类。谢谢。我想要一个用于(全球应用程序)设置的TabItem,然后是“城市”中每个城市的“x”个TabItems。设置视图和城市视图以及它们的TabItem标题模板不同。