我希望我的tabitem
以网格形式显示多个usercontrols
。想象一下,在单个grid
中有一个tabitem
,其中第一行和第二行包含相应的usercontrol1
和usercontrol2
。这些用户控件的ViewModel是View1Model.cs
和View2Model.cs
。
我目前可以使用以下方法显示单个usercontrol
:
View.xaml
的代码:
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Header}"/>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<ContentControl Content="{Binding Content}" />
</ScrollViewer>
</DataTemplate>
</TabControl.ContentTemplate>
ViewModel.cs
的代码:
public ObservableCollection<TabItem> Tabs { get; set; }
public ToolViewModel ()
{
Tabs = new ObservableCollection<TabItem>();
Tabs.Add(new TabItem { Header = "Header", Content = new View1Model()});
}
TabItem.cs
(型号)的代码:
public string Header { get; set; }
public ViewModelBase Content { get; set; }
很显然,我无法以这种方式向同一ContentControl
添加另一个Header
。为了解决该问题,我想我应该首先将public ViewModelBase Content { get; set; }
更改为public ViewModelBase[] Content { get; set; }
。但是,我不确定如何在xaml中显示ContentControl的列表。
编辑:我最终使用ObservableCollection<ViewModelBase>
而不是简单的数组。
答案 0 :(得分:2)
要解决该问题,我想首先将
public ViewModelBase Content { get; set; }
更改为public ViewModelBase[] Content { get; set; }
。但是,我不确定如何在xaml中显示ContentControl
的列表。
使用ItemsControl
:
<TabControl.ContentTemplate>
<DataTemplate>
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<ItemsControl ItemsSource="{Binding Content}" />
</ScrollViewer>
</DataTemplate>
</TabControl.ContentTemplate>