• Caliburn Micro框架快速上手(WP)


    一、使用nuget添加起始工程

       

       

    二、修改App.xaml文件和App.xaml.cs文件

       

    AppBootstrapper介绍:

    AppBootstrapper根据中文的直译可以看出来此类的大概的作用,但笔者总结为:

    1、负责接管程序生命周期中的事件(Lunch Deactivate等)

    2、配置IOC容器

    3、添加自定义的命名协定

       

    1、负责接管程序生命周期中的事件:

    之前的app生命周期相关的操作在AppBootstrapper里面可以通过重载找到,因此若程序原来逻辑中存在处理,放到对应的函数中即可

       

       

    2、配置IOC容器:

       

       

    CM框架中自带了一个容器,叫做PhoneContainer,很简洁的容器,提供了一系列的函数用来配置,如果希望使用其他容器,那么可以在AppBootstrapper中进行修改和配置 Container介绍

       

    3、添加自定义命名协定:

    CM有一套自动binding机制,可以根据控件的Name对应到VM中的属性上,并将控件设定的属性Binding到VM中对应的属性上。举个例子:

    对于TextBox而言x:Name若设定为Title,那么便会自动将Textbox的Text属性自动Binding到TextBox的DataContext所在的VM的Title属性上(如果存在)

    当然如果不喜欢这种方式,使用原始的Binding也是支持的。(笔者建议使用Text={Binding Title}更具可读性)

       

    三、CM的View和ViewModel自动Binding机制

       

    CM会根据内置的View、ViewModel 命名协定(Conventions)寻找View/ViewModel

       

    具体的协定内容如下:

       

      

    ViewModel

    View

    Convention

    <EntityName>ViewModel

    <EntityName>View

    举例

    TabViewModel

    TabView

    Convention

    <EntityName>PageViewModel

    <EntityName>Page

    举例

    OrderPageViewModel

    OrderPage

    Convention

    <RootNS>.<ViewModelTypeName>

    <RootNS>.<ViewTypeName>

    举例

    MyProject.MainPageViewModel

    MyProject.MainPage

    Convention

    <RootNS>.ViewModels.[<ChildNS>].<ViewModelTypeName>

    <RootNS>.Views.[<ChildNS>].<ViewTypeName>

    举例

    MyProject.ViewModels.ShellViewModel

    MyProject.Views.ShellView

      

    MyProject.ViewModels.Utilities.SettingsViewModel

    MyProject.Views.Utilities.SettingsView

       

    命名协定详细的介绍

       

    四、CM的页面导航处理

       

    关键类:

       

    UriBuilder

       

    工作原理:

    此类为一个Builder类用来构建导航的Uri。并根据View-ViewModel协定,根据ViewModel找到对应的View路径,然后进行导航。

    主要方法:

    WithParam

    将传入的参数和值写入到类内部的字典中

    Navigate

    调用内部BuildUri方法,将之前字典中的键值对序列化成导航参数,根据ViewModel找到View路径,然后调用INavigationService接口定义的导航方法

       

    FrameAdapter

       

    CM内部实现了FrameAdapter这个类这个类的核心功能为:

    1、Hook 程序的Frame的导航事件,Navigating,Navigated

       

    2、在Navigating触发的时候

    判断上一个页面的DataContext是否实现了IGuardClose和IDeactivate接口,若实现了IGuardClose接口,则根据接口中定义的CanClose来决定是否取消这次导航。若实现了IDeactive接口,则调用触发上一个页面的DataContext的Deactivate方法,具体代码在后面。

       

    3、在Navigated触发的时候

    通过反射调用页面的构造方法(因此xaml.cs文件甚至可以删除掉)

    根据当前页面,根据View-ViewModel协定找到对应的ViewModel,将当前页面的DataContext设置为对应的ViewModel。

    根据导航串中参数将参数注入到ViewModel中对应的属性上

    根据命名协定对页面的子元素分别进行Binding

    若ViewModel实现了IActivite接口,同时调用Activate

       

    以上介绍可以到CM的主页上找到源码进行更进一步的查看,并加深理解

       

    明白上述两个类的职责之后,那么当我们使用CM框架进行导航的时候,就可以清楚的了解CM是如何实现根据VM找到View然后导航,并且将对应的属性赋值上去了。

     

    如果对CM框架有任何问题欢迎加入

    WP8交流群:182659848

  • 相关阅读:
    [LeetCode]题解(python):136-Single Number
    [LeetCode]题解(python):135-Candy
    [LeetCode]题解(python):134-Gas Station
    [LeetCode]题解(python):133-Clone Graph
    [LeetCode]题解(python):132-Palindrome Partitioning II
    [LeetCode]题解(python):131-Palindrome Partitioning
    [LeetCode]题解(python):130-Surrounded Regions
    [LeetCode]题解(python):129-Sum Root to Leaf Numbers
    [LeetCode]题解(python):128-Longest Consecutive Sequence
    [LeetCode]题解(python):127-Word Ladder
  • 原文地址:https://www.cnblogs.com/tianhonghui/p/3438114.html
Copyright © 2020-2023  润新知