WPF TabControl mit ContentControl
Ich habe viel auf SO gesucht und keine Antwort auf meine Probleme gefunden. Ich möchte TabControl mit MVVM verwenden. So füge ich TabControl zu MainWindow.xaml @ hin
<Window.Resources>
<DataTemplate DataType="{x:Type models:PartnersViewModel}">
<views:PartnersView />
</DataTemplate>
<DataTemplate DataType="{x:Type models:ProjectsViewModel}">
<views:ProjectsView />
</DataTemplate>
</Window.Resources>
<Window.DataContext>
<models:ApplicationViewModel/>
</Window.DataContext>
<TabControl ItemsSource="{Binding PageViewModels}" TabStripPlacement="Left">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl Content="{Binding}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
PageViewModels istObservableCollection<IPageViewModel>
. IPageViewModel
ist eine einfache Schnittstelle mit einer EigenschaftName
. Es gibt 2 Implementierungen dieser SchnittstellePartnersViewModel
undProjectsViewModel
.
public class ProjectsViewModel : IPageViewModel
{
public String Name
{
get { return "Projects"; }
}
}
public class PartnersViewModel : IPageViewModel
{
public String Name
{
get { return "Partners"; }
}
}
Ich möchte, dass jede Registerkarte als ContentControl angezeigt wird. Der Kopfzeilentext stammt aus der Eigenschaft Name. Meine ProjectsView und PartnersView sehen so aus:
<UserControl x:Class="WANIRPartners.Views.ProjectsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" >
<Grid>
<Label Content="Projects Content" />
</Grid>
</UserControl>
Mit diesem Code, Header und Inhalt inTabControl
ist genau das gleiche. 'Projektinhalt' / 'Partnerinhalt' werden in Registerkartenüberschriften und (dies ist in Ordnung) auch in Registerkarteninhalten angezeigt. Wenn ich @ ände<Label/>
zu<DataGrid/>
tab-Header enthält Datagrid (sic!). Wie kann ich das richtig zum Laufen bringen? Ich meine, wie kann ich Header als Wert von Eigenschaft @ anzeigName
und Tab-Inhalt als richtig gerendert<views:PartnersView />
oder<views:ProjectsView />
je nachdem was in @ iPageViewModels
.