TabControl中的WPF MVVM多个ContentControls

时间:2018-07-12 09:54:33

标签: c# wpf mvvm

我希望我的tabitem以网格形式显示多个usercontrols。想象一下,在单个grid中有一个tabitem,其中第一行和第二行包含相应的usercontrol1usercontrol2。这些用户控件的ViewModel是View1Model.csView2Model.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>而不是简单的数组。

1 个答案:

答案 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>