Laden...

Wie mehrere Views an ein TabControl binden?

Erstellt von GeneVorph vor 4 Jahren Letzter Beitrag vor 4 Jahren 924 Views
G
GeneVorph Themenstarter:in
180 Beiträge seit 2015
vor 4 Jahren
Wie mehrere Views an ein TabControl binden?

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

2.078 Beiträge seit 2012
vor 4 Jahren

Bei den Resource-Einträgen, lass da Mal den Key weg.

G
GeneVorph Themenstarter:in
180 Beiträge seit 2015
vor 4 Jahren

Vielen Dank, Palladin007 - genau das war das Problem (Facepalm)!
Kaum macht man's richtig - schon funktioniert's!

Gruß
Vorph