Wie kann ich meinem DataTemplate mitteilen, dass es an eine Eigenschaft im PARENT ViewModel gebunden werden soll?

Ich habe folgendesMainView.xaml Datei, die als MVVM-Menüumschalter gut funktioniert. Ich habe diese Paare:

Page1View / Page1ViewModelPage2View / Page2ViewModel

in meinemMainViewModel Ich fülle eine ObservableCollection mit beiden ViewModels, wenn der Benutzer auf das Symbol klicktNächster Taste, ruft esNextPageCommand im MainViewModel welches ausschaltetCurrentPageViewModel mit einem neuen ViewModel, das dann mit einer entsprechenden Ansicht angezeigt wird, funktioniert gut.

Ich habe auch ein Menü, das mit allen Titeln aus den ViewModels in der Observable-Sammlung gefüllt ist, was auch gut funktioniert.

Jedes MenuItem hat jedoch ein Command = "{Binding SwitchPageCommand}", das SwitchPageCommand auf derMainViewModel und nicht auf z.B.Page1ViewModel oderPage2ViewModel.

Wie kann ich also in der Vorlage angeben, nicht an das aktuelle ViewModel zu binden, sondern an das ViewModel welchesenthält dieses ViewModel, z.B. etwas wie das:

<code>PSEUDO-CODE:

<DataTemplate x:Key="CodeGenerationMenuTemplate">
    <MenuItem 
        Command="{Binding <parentViewModel>.SwitchPageCommand}" 
        Header="{Binding Title}" 
        CommandParameter="{Binding Title}"/>
</DataTemplate>
</code>

Hier istMainViewModel:

<code><Window x:Class="TestMenu234.Views.MainView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:c="clr-namespace:TestMenu234.Commands"
    xmlns:vm="clr-namespace:TestMenu234.ViewModels"
    xmlns:v="clr-namespace:TestMenu234.Views"
    Title="Main Window" Height="400" Width="800">

    <Window.Resources>
        <DataTemplate x:Key="CodeGenerationMenuTemplate">
            <MenuItem Header="{Binding Title}" Command="{Binding SwitchPageCommand}" CommandParameter="{Binding Title}"/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type vm:Page1ViewModel}">
            <v:Page1View/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type vm:Page2ViewModel}">
            <v:Page2View/>
        </DataTemplate>
    </Window.Resources>

    <DockPanel>

        <Menu DockPanel.Dock="Top">
            <MenuItem Header="Code _Generation" ItemsSource="{Binding AllPageViewModels}"
                      ItemTemplate="{StaticResource CodeGenerationMenuTemplate}"/>
        </Menu>

        <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
            <Button Margin="5" Content="Next Page" Command="{Binding NextPageCommand}"/>
        </StackPanel>

        <ContentControl
            Content="{Binding CurrentPageViewModel}"/>

    </DockPanel>
</Window>
</code>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage