Laden...

Wie kann ich im WPF mit MVVM über eine Navigation verschiedene Seiten ein- und ausblenden?

Erstellt von CombatKarl vor 4 Jahren Letzter Beitrag vor 4 Jahren 839 Views
CombatKarl Themenstarter:in
36 Beiträge seit 2020
vor 4 Jahren
Wie kann ich im WPF mit MVVM über eine Navigation verschiedene Seiten ein- und ausblenden?

Hallo zusammen, Folgende Problematik:

Ich stehe gerade gänzlich auf dem Schlauch, was Navigation in MVVM angeht.
Dabei soll beim Start eines WPF Windows eine Seite (userControl) angezeigt werden, die 2 Buttons enthält (Startpage & InputPage) und ein ContentControl. Diese Seite ist meine StartPage.

Klicke ich jetzt auf den Button „InputPage“ soll sich in der ContentControl eine Seite öffnen, die wiederum 2 Buttons (InputA & InputB) und ein ContentControl besitzt, in welchem die Inhalte von InputAPage bzw. InputBPage angezeigt werden. Automatisch soll der Inhalt von InputAPage angezeigt werden.

Ich habe dafür schon mal eingehend das Tutorial
https://youtu.be/1_cUgpWqS0Y
dafür durchgekaut, aber an der Stelle mit der weiteren Navigation und dem automatischen Anzeigen von StartPage und - bei Klick auf InputButton - InputAPage komme ich einfach nicht weiter.

Ich hoffe ihr könnt mir dabei helfen, dass ich nicht mehr auf dem Schlauch stehe. Vielen herzlichen Dank schon mal. [Hinweis] Wie poste ich richtig?

<--- Wer übt, ist feige ! --->

4.938 Beiträge seit 2008
vor 4 Jahren

Hallo und willkommen,

wo genau hängst du denn?

Gerade gestern gab es eine ähnliche Frage: Wie Views und Windows mit WPF verwalten? - schau dir mal die Links dort an.

187 Beiträge seit 2009
vor 4 Jahren

Servus,

hört sich für mich nach DataTemplates und DataTrigger an.
Hilft das weiter?

    <Window.Resources>
        <DataTemplate x:Key="StartPageTemplate" DataType="{x:Type vm:StartPageViewModel}">
            <v:StartPageControl />
        </DataTemplate>
        <DataTemplate x:Key="InputPageTemplate" DataType="{x:Type vm:InputPageViewModel}">
            <local:InputPageControl />
        </DataTemplate>
    </Window.Resources>
    
    <Grid>
        <ContentControl x:Name="MainContent" Content="{Binding}">
            <ContentControl.Style>
                <Style TargetType="ContentControl">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsStartPage}" Value="True">
                            <Setter Property="ContentTemplate" Value="{StaticResource StartPageTemplate}" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding IsStartPage}" Value="False">
                            <Setter Property="ContentTemplate" Value="{StaticResource InputPageTemplate}" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ContentControl.Style>
        </ContentControl>
    </Grid>