Jak mogę powiedzieć mojemu DataTemplate, aby związał się z właściwością w PARENT ViewModel?
Mam następująceMainView.xaml plik, który działa dobrze jako przełącznik menu MVVM. Mam te pary:
Page1View / Page1ViewModelPage2View / Page2ViewModelw moimMainViewModel Wypełniam ObservableCollection zarówno ViewModels, a następnie, gdy użytkownik kliknieKolejny przycisk, to dzwoniNextPageCommand w MainViewModel, który się wyłączaCurrentPageViewModel z nowym ViewModel, który jest następnie wyświetlany z odpowiednim widokiem, działa dobrze.
Mam też menu wypełnione wszystkimi tytułami z ViewModels w kolekcji Observable, które również działają dobrze.
Jednak każdy MenuItem ma Command = "{Binding SwitchPageCommand}", który POWINIEN wywoływać SwitchPageCommand naMainViewModel a nie na przykładPage1ViewModel lubPage2ViewModel.
Więc jak mogę wskazać w szablonie, aby nie wiązać się z bieżącym ViewModel, ale ViewModel, któryzawiera ten ViewModel, np. coś takiego:
<code>PSEUDO-CODE: <DataTemplate x:Key="CodeGenerationMenuTemplate"> <MenuItem Command="{Binding <parentViewModel>.SwitchPageCommand}" Header="{Binding Title}" CommandParameter="{Binding Title}"/> </DataTemplate> </code>
Tutaj jestMainViewModel:
<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>