zoukankan      html  css  js  c++  java
  • Windows Phone 系列 Simple MVVM Navigation 页面导航的实现

     免责声明:文章为个人理解,源码皆为测试,本人不对其使用产生的后果负任何责任。

    测试源码:https://files.cnblogs.com/sunjunlin/SimpleMvvm-WindowsPhoneNav.zip

    step1 :建立uri映射,如下

    在app.xaml加入

     <Application.Resources>
    <Locators:WindowsPhoneViewModelLocator x:Key="Locator" />

    <!-- STEP: Create UriMapper -->
    <navigation:UriMapper x:Key="UriMapper">
    <navigation:UriMapper.UriMappings>
    <navigation:UriMapping Uri="" MappedUri="/MainPage.xaml"/>
    <navigation:UriMapping Uri="/{pageName}" MappedUri="/Views/{pageName}.xaml"/>
    </navigation:UriMapper.UriMappings>
    </navigation:UriMapper>
    </Application.Resources>

    step 2,在代码中设置uri

    在app.xaml.cs的CompleteInitializePhoneApplication方法中加入

    // STEP1: Set frame's UriMapper
    var frame = (PhoneApplicationFrame)Current.RootVisual;
    frame.UriMapper = (UriMapper)Current.Resources["UriMapper"];

    step3,实现导航接口

       // STEP 3: Create a MockNavigator that Implements System.Windows.Controls.INavigate
    public class MockNavigator : INavigator
    {
    public void NavigateTo(string pageName)
    {
    Debug.WriteLine("Navigating to " + pageName);
    }
    }


    step 4,定义导航名称:

     // STEP 4: set page name
    public class PageNames
    {
    public const string Customer = "CustomerView";
    public const string Page2 = "Page2";
    }

    step 5 传送导航器:

         public CustomerViewModel CustomerViewModel
    {
    get
    {
    // Specify service agent
    ICustomerServiceAgent serviceAgent = new MockCustomerServiceAgent();

    //STEP 5: Create navigator
    INavigator navigator = CreateNavigator();

    // Create ViewModel passing service agent
    return new CustomerViewModel(serviceAgent, navigator);
    }


    step 6:添加导航属性到view model

        // STEP 6: Add an INavigate property to CustomerViewModel
    public INavigator Navigator { get; set; }



    step 7:

       // STEP 7: Ctor that accepts ICustomerServiceAgent and INavigator
    public CustomerViewModel(ICustomerServiceAgent serviceAgent, INavigator navigator)
    {
    this.serviceAgent = serviceAgent;
    this.Navigator = navigator;
    }

    step 8:在view设置导航命令

       <!-- STEP 8: Use EventToCommand to bind Click event to view-model NavigateToPage2 command -->
    <i:Interaction.Triggers>
    <i:EventTrigger EventName="Click">
    <mvvm:EventToCommand Command="{Binding NavigateToPage2Command}"/>
    </i:EventTrigger>
    </i:Interaction.Triggers>

    step 9:在view model创建导航命令

     // STEP 9: Create NavigateToPage2Command
    private DelegateCommand navigateToPage2Command;
    public DelegateCommand NavigateToPage2Command
    {
    get
    {
    return navigateToPage2Command ?? (navigateToPage2Command
    = new DelegateCommand(NavigateToPage2));
    }
    private set { navigateToPage2Command = value; }
    }

    step 10:添加导航方法,导航到指定的页面。

    // STEP 10: Add a Navigate method accepting a page name
    public void Navigate(string pageName)
    {
    Debug.Assert(Navigator != null, "INavigator not set");
    Navigator.NavigateTo(pageName);
    }


    完。

    总结:通过对 simple mvvm的使用,以下几点

    1.需要用到URImapper,

    2.导航可以实现不同的接口,灵活

    3.导航在使用时,可以在直接创建navigator

    如:

    public void InitNavigator()
    {
    INavigator navigator = new Navigator();
    this.Navigator = navigator;
    }

    4.导航如果有参数,则需要在各个view model中切换,这时可以发送消息。(这一点,如果有更好的方法请留言告诉我,谢谢)。






    作者:johnny 出处:http://www.cnblogs.com/sunjunlin 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    《大数据之路:阿里巴巴大数据实践》——7-章 数据挖掘
    《如何做到毫秒级从百亿大表任意维度筛选数据?》
    《大数据之路:阿里巴巴大数据实践》——6-章 数据服务
    《【原创】推荐系统
    给机器学习面试者的十项建议 | 面试官角度
    干货 | NLP算法岗大厂面试经验与路线图分享
    目标检测任务中的训练宝典 |实用技巧
    食物图片变菜谱:这篇CVPR论文让人人都可以学习新料理
    一文彻底搞懂BP算法:原理推导+数据演示+项目实战(下篇)
    CVPR 2019细粒度图像分类竞赛中国团队DeepBlueAI获冠军 | 技术干货分享
  • 原文地址:https://www.cnblogs.com/sunjunlin/p/2429071.html
Copyright © 2011-2022 走看看