zoukankan      html  css  js  c++  java
  • 16-24 Navigation-导航

    声明

    原文出处如下:

    作者:RyzenAdorer 内容简介:Prism医疗案例

    作者:可是我爱你啊 内容简介:Prism官方案例的学习分享

    Prism官网开发文档

    容器相关知识的学习

    Microsoft官方文档

    这是一篇记录作者学习Prism的随笔,该随笔的内容是作者通过5个资源学习汇总而成,主要是为了方便自己以后拾遗温习所用,如果文中内容看不懂,推荐直接阅读相关原文。

    16-24 Navigation-》导航

    RegionContext-》使用RegionContext将数据传递到嵌套区域

    <ContentControl Grid.Row="1" Margin="10"
    prism:RegionManager.RegionName="PersonDetailsRegion"
    prism:RegionManager.RegionContext="{Binding SelectedItem, ElementName=_listOfPeople}"/>
    

    Region Navigation-》如何使用基本区域导航

    1. 将view注册成Navication,并且注册到容器中

      public void RegisterTypes(IContainerRegistry containerRegistry)
      {
        containerRegistry.RegisterForNavigation<ViewA>();
        containerRegistry.RegisterForNavigation<ViewB>();
      }
      
    2. 设置带参数的Command命令

      //xaml
      <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>
      //cs
      private readonly IRegionManager _regionManager;
      public DelegateCommand<string> NavigateCommand { get; private set; }
      public MainWindowViewModel(IRegionManager regionManager)
      {
      _regionManager = regionManager;
      NavigateCommand = new DelegateCommand<string>(Navigate);
      }
      private void Navigate(string navigatePath)
      {
      if (navigatePath != null)
      _regionManager.RequestNavigate("ContentRegion", navigatePath);
      }
      
    3. RegionManager通过RequestNavigate方法来获取已经注册的Navigation并且绑定到Region上去

      //当需要根据调用结果来处理一些事情,可以使用下面这个方法
      void RequestNavigate(string regionName, string source, Action<NavigationResult> 
      
     private void Navigate(string navigatePath)
    {
    if (navigatePath != null)
    _regionManager.RequestNavigate("ContentRegion", navigatePath, NavigationComplete);
    }
    private void NavigationComplete(NavigationResult result)
    {
    System.Windows.MessageBox.Show(String.Format("Navigation to {0} complete. ", result.Context.Uri));
    }
    

    RequestNavigate

     /// <summary>
    /// 导航指定的区域管理器
    /// </summary>
    /// <param  name="regionName">要调用导航的区域的名称</param>
    /// <param name="source">要显示内容的URI</param>
    /// <param name="navigationCallback">导航的回调方法</param>
    void RequestNavigate(string regionName, string source, Action<NavigationResult> 
    

    通过INavigationAware了解有关View和ViewModel导航参与的信息

    如果需要View或者ViewModel也参与到Navigation中来,比如当你Request一个Navigation的时候,希望navigation本身显示一些信息,为此 Prism为我们提供了一个INavigationAware 接口。

    	//
        // 总结:
        //     为导航中涉及的对象提供导航通知的方法
        //     活跃.
        public interface INavigationAware
        {
            //
            // 总结:
            //     调用以确定此实例是否可以处理导航请求。
            //
            // 参数:
            //   导航上下文:
            //     导航上下文.
            //
            // 返回:
            //    如果该实例接受导航请求,则为true;否则,假的。
            bool IsNavigationTarget(NavigationContext navigationContext);
            //
            // 总结:
            //    当导航离开实现者时调用。
            //
            // 参数:
            //   导航上下文:
            //     导航上下文.
            void OnNavigatedFrom(NavigationContext navigationContext);
            //
            // 总结:
            //     当导航到实现时调用。
            //
            // 参数:
            //   导航上下文:
            //     导航上下文.
            void OnNavigatedTo(NavigationContext navigationContext);
        }
    
    1. 实现INavigationAware接口,为导航中涉及的对象提供导航通知的方法
    2. 实现对应的方法

    导航期间控制视图实例

    1. 实现INavigationAware接口,为导航中涉及的对象提供导航通知的方法
    2. 实现对应的方法

    将参数从View / ViewModel传递到另一个View / ViewModel

         // 摘要:
            //    此方法允许IRegionManager定位指定区域并导航
            //    在其中向指定的目标字符串传递一个NavigationParameters实例,
            //    保存对象参数的集合。
            //
            // 参数:
            //   regionName:
            //    导航将要出现的区域的名称。
            //
            //   target:
            //    表示区域将导航到的目标的字符串。
            //
            //   navigationParameters:
            //    NavigationParameters的一个实例,它保存一个对象参数集合。
            void RequestNavigate(string regionName, string target, NavigationParameters navigationParameters);
    

    使用IConfirmNavigationReqest界面确认或取消导航

    1. 实现IConfirmNavigationRequest接口
    2. ConfirmNavigationRequest进行判断
     摘要:
            //    确定该实例是否接受导航离开。
            //
            // 参数:
            //   NavigationContext:
            //     导航上下文。
            //
            //   continuationCallback:
            //    指示导航何时可以继续的回调。
            //
            // 言论:
            //    此方法的实现者不需要在此方法之前调用回调函数
            //    完成,但必须确保回调最终被调用。
            void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback);
    

    使用IRegionMemberLifetime自动从内存中删除视图

    1. 实现IRegionMemberLifetime接口
    2. 并将KeepAlive属性的值设置为false
     //
        // 摘要:
        //     在实现时,允许将实例放置在Prism.Regions中。IRegion使用
        //     Prism.Regions.Behaviors。RegionMemberLifetimeBehavior表示它应该
        //     当它从激活状态转换为非激活状态时删除。
        public interface IRegionMemberLifetime
        {
            //
            // 摘要:
            //     获取一个值,该值指示在停用时此实例是否应保持活动状态。
            bool KeepAlive { get; }
        }
    
    //案例
    
            public bool KeepAlive
            {
                get
                {
                    return false;
                }
            }
    

    了解如何使用导航日志

    1. Prism中是通过IRegionNavigationJournal来实现的
    2. journal 实现一种类似浏览器前进后退按钮一样的效果,当一个region 有多个view的时候,他会自动记录view的加载顺序,然后在view之间来回切换
    //
    // 摘要:
    //     提供区域内的当前、后退和前进导航日志。
    public interface IRegionNavigationJournal
    
    //案例
    public void OnNavigatedTo(NavigationContext navigationContext)
            {
                _journal = navigationContext.NavigationService.Journal;
            }
    _journal.GoBack();
    _journal.GoForward();
    
    登峰造极的成就源于自律
  • 相关阅读:
    运行时动态的创建form的方法
    用X++代码来动态的改变表的属性
    使用WinAPI类来查找文件
    用循环得到表中所有的字段
    用X++建立和调用报表(Report)
    JAVA 保留字
    Cygwin使用
    系统程序员成长计划-算法与容器(三) (上)
    系统程序员成长计划工程管理(二)
    系统程序员成长计划-算法与容器(三) (下)
  • 原文地址:https://www.cnblogs.com/fishpond816/p/13467428.html
Copyright © 2011-2022 走看看