Guten Abend,
ich versuche mehrere Views an ein TabControl zu binden.
Ich möchte meine Views und die zugehörigen ViewModels unter TabControl.Resources implementieren:
<TabControl TabStripPlacement="Left" ItemsSource="{Binding ManagerViewModels}" SelectedIndex="0">
<TabControl.Resources>
<DataTemplate x:Key="ShowOverview" DataType="{x:Type viewModels:OverviewViewModel}">
<views:OverviewView/>
</DataTemplate>
<DataTemplate x:Key="ShowSchoolClass" DataType="{x:Type viewModels:SchoolClassViewModel}">
<views:SchoolClassView/>
</DataTemplate>
<DataTemplate x:Key="ShowGradeCalculator" DataType="{x:Type viewModels:GradeCalculatorViewModel}">
<views:GradeCalculatorView/>
</DataTemplate>
</TabControl.Resources>
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Header" Value="{Binding VMLabel}" />
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
Alle ViewModels sind gleich aufgebaut und enthalten derzeit lediglich ein string Property
public class OverviewViewModel
{
public string VMLabel { get; set; }
/// <summary>
/// Constructor of the OverviewViewModel-Class
/// </summary>
public OverviewViewModel()
{
VMLabel = "Übersicht";
}
}
Problem: Wenn ich meine App starte, zeigen die Header des TabControl erwartungsgemäß den im jeweiligen ViewModel für VMLabel hinterlegten string. Aber für die Views im Content-Bereich bekomme ich lediglich einen string wie z. B.:
"StudentManager:ViewModels.OverviewViewModel° --> s. angehängter Screenshot
Die Views sind verschiedene UserControls, die derzeit nur mit einem Grid gefüllt sind, dessen Hintergrundfarbe ich verändert habe. Beispiel:
<UserControl x:Class="StudentManager.Views.CertificatesView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
...
d:DesignHeight="450" d:DesignWidth="800">
<Grid Background="Purple">
</Grid>
</UserControl>
Wenn ich die einzelnen Tabs aktiviere, sollte ich dann nicht statt der Pfadangabe die jeweilige Hintergundfarbe des Grids des entsprechenden UserControls sehen?
Hier ist noch mein MainWindowViewModel
public class MainWindowViewModel : NotifyPropertyChangedBase
{
public ObservableCollection<object> ManagerViewModels { get; set; }
public MainWindowViewModel()
{
ManagerViewModels = new ObservableCollection<object>
{
new OverviewViewModel(),
new SchoolClassViewModel(),
new GradeCalculatorViewModel(),
new CertificateViewModel(),
new SettingsViewModel()
};
}
}
Vielen Dank,
Gruß
Vorph
Bei den Resource-Einträgen, lass da Mal den Key weg.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
Vielen Dank, Palladin007 - genau das war das Problem (Facepalm)!
Kaum macht man's richtig - schon funktioniert's!
Gruß
Vorph