Prism Demo系列(十九) Prism架构剖析:19-NavigationParticipation

一、简介

结构、内容和上篇博客几乎一致。只有少部分的内容是改动的。

二、举例

把改动后的内容,放在这里。

1、ModuleA

1.1、ModuleAModule.cs、ViewA.xaml.cs、ViewB.xaml.cs(与前二篇博客相同,省略)。

1.2、ViewA.xaml或ViewB.xaml:

<UserControl x:Class="ModuleA.Views.ViewA"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:prism="http://prismlibrary.com/"             
             prism:ViewModelLocator.AutoWireViewModel="True">
    <StackPanel>
        <TextBlock Text="{Binding Title}" FontSize="48" HorizontalAlignment="Center" VerticalAlignment="Center" />
        <TextBlock Text="{Binding PageViews}" FontSize="24" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </StackPanel>
</UserControl>

1.3、 ViewAViewModel.cs或ViewBViewModel.cs:

using Prism.Mvvm;
using Prism.Regions;

namespace ModuleA.ViewModels
{
    public class ViewAViewModel : BindableBase, INavigationAware
    {
        private string _title = "ViewA";
        public string Title
        {
            get { return _title; }
            set { SetProperty(ref _title, value); }
        }

        private int _pageViews;
        public int PageViews
        {
            get { return _pageViews; }
            set { SetProperty(ref _pageViews, value); }
        }

        public ViewAViewModel()
        {

        }

        public void OnNavigatedTo(NavigationContext navigationContext)
        {
            PageViews++;
        }

        public bool IsNavigationTarget(NavigationContext navigationContext)
        {
            return true;
        }

        public void OnNavigatedFrom(NavigationContext navigationContext)
        {
            
        }
    }
}

2、NavigationParticipation项目

该项目只有MainWindow.xaml文件变动,其他文件保留。

2.1、MainWindow.xaml.cs等文件与前面的两篇的博客相同。

2.2、MainWindow.xaml:

<Window x:Class="NavigationParticipation.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        Title="{Binding Title}" Height="350" Width="525">

    <!--设置TabControl的表头TabItem-->
    <Window.Resources>
        <Style TargetType="TabItem">
            <Setter Property="Header" Value="{Binding DataContext.Title}" />
        </Style>
    </Window.Resources>
    
    <DockPanel LastChildFill="True">
        <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="5" >
            <Button Command="{Binding NavigateCommand}" CommandParameter="ViewA" Margin="5">Navigate to View A</Button>
            <Button Command="{Binding NavigateCommand}" CommandParameter="ViewB" Margin="5">Navigate to View B</Button>
        </StackPanel>
        <!--TabControl与WPF的TabControl控件一样,理应需要TabItem,及表头-->
        <TabControl prism:RegionManager.RegionName="ContentRegion" Margin="5"  />
    </DockPanel>
</Window>

3、运行效果:

3.1、增加了表头资源,所以你看到运行结果多了表头:

 

3.2、页面的数字自动叠加(自己运行看看才知道效果):

多次点击A/B:

猜你喜欢

转载自blog.csdn.net/xpj8888/article/details/86553246