« Prism navigation with tabcontrol » : différence entre les versions
De Banane Atomic
Aller à la navigationAller à la recherche
Ligne 84 : | Ligne 84 : | ||
<filebox fn='ViewAViewModel.cs'> | <filebox fn='ViewAViewModel.cs'> | ||
public class ViewAViewModel : | public class ViewAViewModel : BindableBase, INavigationAware | ||
{ | { | ||
private string title; | |||
private string | |||
public string Title | public string Title | ||
{ | { | ||
get => | get => this.title; | ||
set => SetProperty(ref | set => SetProperty(ref this.title, value); | ||
} | } | ||
public | public ViewAViewModel() | ||
{ | { | ||
Title = "View A"; | |||
} | } | ||
public bool IsNavigationTarget(NavigationContext navigationContext) => true; | |||
public void OnNavigatedFrom(NavigationContext navigationContext) | public void OnNavigatedFrom(NavigationContext navigationContext) | ||
{ | { } | ||
public void OnNavigatedTo(NavigationContext navigationContext) | public void OnNavigatedTo(NavigationContext navigationContext) | ||
{ | { } | ||
} | } | ||
</filebox> | </filebox> |
Version du 12 octobre 2021 à 21:10
TabControl
MainWindow.xaml |
<Window x:Class="NavigationWPF.Views.MainWindow" xmlns:prism="http://prismlibrary.com/" prism:ViewModelLocator.AutoWireViewModel="True" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <Style TargetType="TabItem"> <Setter Property="Header" Value="{Binding DataContext.Title}" /> </Style> </Window.Resources> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <StackPanel Orientation="Horizontal"> <Button Command="{Binding NavigateCommand}" CommandParameter="ViewA"> Navigate A </Button> <Button Command="{Binding NavigateCommand}" CommandParameter="ViewB"> Navigate B </Button> </StackPanel> <TabControl Grid.Row="1" prism:RegionManager.RegionName="TabRegion" /> </Grid> </Window> |
MainWindowViewModel.cs |
public class MainWindowViewModel : BindableBase { private readonly IRegionManager _regionManager; public DelegateCommand<string> NavigateCommand { get; set; } public MainWindowViewModel(IRegionManager regionManager) { _regionManager = regionManager; NavigateCommand = new DelegateCommand<string>(Navigate); } // ViewA and ViewB are command parameters passed as navigationPath void Navigate(string navigationPath) { // open/reuse a tab and inject the view in it _regionManager.RequestNavigate("TabRegion", navigationPath); } } |
App.xaml.cs |
protected override void RegisterTypes(IContainerRegistry containerRegistry) { // register the views containerRegistry.RegisterForNavigation<ViewA>(); containerRegistry.RegisterForNavigation<ViewB>(); } |
View to inject
ViewA.xaml |
<UserControl x:Class="NavigationWPF.Views.ViewA" xmlns:mvvm="http://prismlibrary.com/" mvvm:ViewModelLocator.AutoWireViewModel="True"> <Grid> <TextBlock Text="View A" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="48" /> </Grid> </UserControl> |
ViewAViewModel.cs |
public class ViewAViewModel : BindableBase, INavigationAware { private string title; public string Title { get => this.title; set => SetProperty(ref this.title, value); } public ViewAViewModel() { Title = "View A"; } public bool IsNavigationTarget(NavigationContext navigationContext) => true; public void OnNavigatedFrom(NavigationContext navigationContext) { } public void OnNavigatedTo(NavigationContext navigationContext) { } } |