zoukankan      html  css  js  c++  java
  • 【整理总结】代码沉淀

     

     

    Caliburn.Micro - Xaml made easy. 

    web: https://github.com/Caliburn-Micro/Caliburn.Micro
    document: http://caliburnmicro.com/documentation/
    nuget: Install-Package Caliburn.Micro

    用于建立各个XAML平台应用,如WPF,Silverlight,WP,支持MV*模式


     更多相关项目,请访问代码沉淀目录

    重要提示:请注意项目的版本,以官方最新版本为准。


     在之前很早的博文中,我大体上翻译了一个系列的文章,只不过由于CM框架更新太快,再加上一个主要原因,自己翻译文章太慢,一个一个单词查,所以只翻译了一大半,不过也足够大家使用了。这一篇文章介绍的是V2和V3版本的稍微会新一些。不过新版本和旧版本主要用法差不多,请看下方的官方示范。

    Basic Configuration, Actions and Conventions

    1. 启动Visual Studio,新建一个解决方案 “Caliburn.Micro.Hello”,使用nuget方式(推荐),或者手动引用dll的方式,添加CM框架的类库和System.Windows.Interactivity.dll。
    删除“MainPage.xaml”,修改 “App.xaml.cs” ,如下方所示:

    复制代码
    namespace Caliburn.Micro.Hello {
        using System.Windows;
    
        public partial class App : Application {
            public App() {
                InitializeComponent();
            }
        }
    }
    复制代码

    2. CM框架更推荐使用View-Model-First方式,我们也这么干,创建第一个VM,名叫“ShellViewModel”,代码如下:

    复制代码
    namespace Caliburn.Micro.Hello {
        using System.Windows;
    
        public class ShellViewModel : PropertyChangedBase {
            string name;
    
            public string Name {
                get { return name; }
                set {
                    name = value;
                    NotifyOfPropertyChange(() => Name);
                    NotifyOfPropertyChange(() => CanSayHello);
                }
            }
    
            public bool CanSayHello {
                get { return !string.IsNullOrWhiteSpace(Name); }
            }
    
            public void SayHello() {
                MessageBox.Show(string.Format("Hello {0}!", Name)); //Don't do this in real life :)
            }
        }
    }
    复制代码

    可以看到,ShellViewModel 继承自 PropertyChangedBase,这个基类简单的定义了属性通知,可实现简单的通知界面更新功能。

    3. 有了简单的VM,下面我们就定义一下 bootstrapper,建立一个新类“HelloBootstrapper”,代码如下:

    复制代码
    namespace Caliburn.Micro.Hello {
        public class HelloBootstrapper : BootstrapperBase {
            public HelloBootstrapper() {
                Initialize();
            }
    
            protected override void OnStartup(object sender, StartupEventArgs e) {
                DisplayRootViewFor<ShellViewModel>();
            }
        }
    }
    复制代码

    这个 Bootsrapper 通过调用一个方法,定义了一个 “顶级ViewModel”。在程序启动时,CM框架在初始化时,就会加载这个顶级VM,并显示这个VM对应的View。
    Bootsrapper 在一些常见的mvvm框架中,可以看做是配置入口,比如配置设置,配置注入容器,等等。

    4. 下一步,我们用 HelloBootstrapper 替换默认的程序启动方式,修改 “App.xaml”,如下所示:

    复制代码
    <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:local="clr-namespace:Caliburn.Micro.Hello"
                 x:Class="Caliburn.Micro.Hello.App">
        <Application.Resources>
            <local:HelloBootstrapper x:Key="bootstrapper" />
        </Application.Resources>
    </Application>
    复制代码

     WPF:

    复制代码
    <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:local="clr-namespace:Caliburn.Micro.Hello"
                 x:Class="Caliburn.Micro.Hello.App">
        <Application.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary>
                        <local:HelloBootstrapper x:Key="bootstrapper" />
                    </ResourceDictionary>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Application.Resources>
    </Application>
    复制代码

     这里,我们为 App 添加了一个资源,资源名为“bootstrapper”,需要提醒的是,此处已经删除了 “Application.StartupUri” 属性的值,不需要通过默认方式启动窗体,改为通过CM框架的bootstrapper方式启动前面配置的那个  “顶级ViewModel”。

    接下来,你可以尝试启动你的程序,会看到界面中有如下字样。 


    Caliburn.Micro.Hello.ShellView not found.

    Caliburn.Micro 已经建立了一个 ShellViewModel,但是它还不知道如何显示,所以,我们需要一个对应的 View,接下来我们创建一个用户控件(User Control),名叫 “ShellView”,xaml代码如下: 

    复制代码
    <UserControl x:Class="Caliburn.Micro.Hello.ShellView"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <StackPanel>
            <TextBox x:Name="Name" />
            <Button x:Name="SayHello"
                    Content="Click Me" />
        </StackPanel>
    </UserControl>
    复制代码

    再次启动你的程序,这次你就能看到刚刚定义的UI界面了。

    尝试在TextBox内输入文字,当Button可用时,点击它,可以看到弹出了一个消息窗。

    CM框架定义了一套简洁有效的 “命名约定” 功能,用于匹配 View 和 ViewModel 之间的联系。
    其实,它就是获取到指定 VM 的全名,并移除了 “Model” 部分,剩下的部分便是对应的 View 了。
    比如,对 “MyApp.ViewModels.MyViewModel” 来说,就会得到 “MyApp.Views.MyView”。

    对比一下 View 和 ViewModel,能发现,View中有一个 TextBox 控件,【x:Name=”Name”】 部分,实现了绑定到ViewModel中的 “Name” 属性。还能发现,View中有一个 Button 控件,【x:Name=”SayHello”】部分,实现了绑定到ViewModel中的 ”SayHello” 方法。最后ViewModel中还有一个 “CanSayHello” 属性,会关联到方法 “SayHello”,绑定功能的可用性如让对应的按钮不可用。

    这些功能,是VM的ActionMessage(绑定至方法)功能,和Conventions(约定)功能的体现。

  • 相关阅读:
    spring 注解学习 一 Bean的注入
    jdk动态代理详解 二 代理失效
    jdk动态代理详解 一 入门
    tomcat中web应用的目录结构
    mongoose与mongodb 的版本兼容性表格
    树莓派3B安装ffmpeg过程记录
    ESP8266驱动SSD1306 ESP8266 for Arduino(NodeMCU U8G2库)
    ESP8266 for Arduino开发环境安装
    Mongodb3.4升张到4.0过程
    使用webgl(three.js)创建自动化抽象化3D机房,3D机房模块详细介绍(抽象版一)
  • 原文地址:https://www.cnblogs.com/aijiao/p/11078615.html
Copyright © 2011-2022 走看看