先贴上 DeepSeek 的 Demo代码
Xaml:
<TabControl ItemsSource="{Binding Tabs}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Header}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<DataGrid ItemsSource="{Binding Data}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
ViewModel:
public class TabViewModel
{
public string Header { get; set; }
public ObservableCollection<DataItem> Data { get; set; }
}
public class MainViewModel
{
public ObservableCollection<TabViewModel> Tabs { get; set; }
public MainViewModel()
{
Tabs = new ObservableCollection<TabViewModel>
{
new TabViewModel { Header = "Tab 1", Data = new ObservableCollection<DataItem>(/* 数据 */) },
new TabViewModel { Header = "Tab 2", Data = new ObservableCollection<DataItem>(/* 数据 */) }
};
}
}
但是实际操作中<DataGrid ItemsSource="{Binding Data}" /> Binding对象并不能找到 Data,依然是 Tabs 对象。经测试这里应该修改代码如下
<TabControl.ContentTemplate>
<DataTemplate DataType="{x:Type pages:Data}">
......
</DataTemplate>
</TabControl.ContentTemplate>
或者使用<TabControl.Resources>
<TabControl.Resources>
<DataTemplate DataType="{x:Type pages:Data}">
......
</DataTemplate>
</TabControl.Resources>