[英]WPF MVVM Multiple ContentControls in TabControl
I want my tabitem
to display multiple usercontrols
in a grid fashion. 我希望我的tabitem
以网格形式显示多个usercontrols
。 Imagine having a grid
in a single tabitem
where the first row and the second row contains corresponding usercontrol1
and usercontrol2
. 想象一下在一个tabitem
中有一个grid
,其中第一行和第二行包含相应的usercontrol1
和usercontrol2
。 ViewModels for these user controls are View1Model.cs
and View2Model.cs
. 这些用户控件的ViewModel是View1Model.cs
和View2Model.cs
。
I can currently display a single usercontrol
using the following method: 我目前可以使用以下方法显示单个usercontrol
:
Code for View.xaml
: 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>
Code for ViewModel.cs
: ViewModel.cs
代码:
public ObservableCollection<TabItem> Tabs { get; set; }
public ToolViewModel ()
{
Tabs = new ObservableCollection<TabItem>();
Tabs.Add(new TabItem { Header = "Header", Content = new View1Model()});
}
Code for TabItem.cs
(model): TabItem.cs
代码(模型):
public string Header { get; set; }
public ViewModelBase Content { get; set; }
Obviously, I can't add another one ContentControl
to the same Header
in this way. 显然,我不能以这种方式将另一个ContentControl
添加到同一Header
。 To solve the problem, I suppose I should firstly change public ViewModelBase Content { get; set; }
为了解决该问题,我想我应该首先更改public ViewModelBase Content { get; set; }
public ViewModelBase Content { get; set; }
public ViewModelBase Content { get; set; }
to public ViewModelBase[] Content { get; set; }
public ViewModelBase Content { get; set; }
到public ViewModelBase[] Content { get; set; }
public ViewModelBase[] Content { get; set; }
public ViewModelBase[] Content { get; set; }
. public ViewModelBase[] Content { get; set; }
。 However, I am not sure how I should display a list of ContentControl in xaml. 但是,我不确定如何在xaml中显示ContentControl的列表。
EDIT: I ended up using ObservableCollection<ViewModelBase>
instead of simple arrays. 编辑:我最终使用ObservableCollection<ViewModelBase>
而不是简单的数组。
To solve the problem, I suppose I should firstly change
public ViewModelBase Content { get; set; }
为了解决该问题,我想我应该首先更改public ViewModelBase Content { get; set; }
public ViewModelBase Content { get; set; }
public ViewModelBase Content { get; set; }
topublic ViewModelBase[] Content { get; set; }
public ViewModelBase Content { get; set; }
到public ViewModelBase[] Content { get; set; }
public ViewModelBase[] Content { get; set; }
public ViewModelBase[] Content { get; set; }
.public ViewModelBase[] Content { get; set; }
。 However, I am not sure how I should display a list ofContentControl
in xaml. 但是,我不确定如何在xaml中显示ContentControl
的列表。
Use an ItemsControl
: 使用ItemsControl
:
<TabControl.ContentTemplate>
<DataTemplate>
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<ItemsControl ItemsSource="{Binding Content}" />
</ScrollViewer>
</DataTemplate>
</TabControl.ContentTemplate>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.