zoukankan      html  css  js  c++  java
  • 使用Caliburn.Micro系列2:Convention

    CM中实现一个比较有意思的特性,就是智能匹配。

    通常使用MVVM的写法:在匹配 View和ViewModel时会使用DataContext,在匹配数据属性时使用Binding,在匹配事件命令时使用Command。

    而CM通过ElementConvention 实现它们的自动匹配,只需要遵循指定的命名规则[可自定义]。由于一个控件的事件有多种(比如:Button:Click,MouseEnter等等),CM提供了最常用的事件的绑定,可根据具体需求自定义。

    自动绑定演示:

    在View中添加如下代码:

    <Window
        x:Class="Caliburn.Micro.Demo.ShellView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:cal="http://www.caliburnproject.org">
    
        <Grid Background="White">
            <TextBlock x:Name="TbMain" FontSize="50" />
            <Button
                x:Name="OpenOneChild"
                Width="120"
                Height="30"
                Content="OpenOneWindow" />
        </Grid>
    
    </Window>

    在ViewModel中添加:

      public class ShellViewModel : Caliburn.Micro.PropertyChangedBase, IShell
        {
            private readonly IWindowManager windowManager;
    
            [ImportingConstructor]
            public ShellViewModel(IWindowManager windowManager)
            {
                TbMain = "This is ShewView";
                this.windowManager = windowManager;
            }
            private string _tbMain;
            public string TbMain
            {
                get { return _tbMain; }
                set
                {
                    _tbMain = value;
                    NotifyOfPropertyChange(() => TbMain);
                }
            }
    
            public void OpenOneChild()
            {
                ChildOneViewModel oneViewModel=new ChildOneViewModel();
                windowManager.ShowDialog(oneViewModel);
            }

    项目中新建一个ChildOneView.xaml和一个ChildOneViewModel.cs。

    <Window
        x:Class="Caliburn.Micro.Demo.ChildOneView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:local="clr-namespace:Caliburn.Micro.Demo"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        Title="ChildOneView"
        Width="300"
        Height="300"
        mc:Ignorable="d">
        <StackPanel>
            <TextBlock x:Name="ChildOne" />
            <TextBox Text="{Binding ChildOne}" />
            <TextBox />
        </StackPanel>
    </Window>
    View Code
    public class ChildOneViewModel:Screen
        {
            public ChildOneViewModel()
            {
                ChildOne = "This is ChildOneView";
            }
    
            private string _childOne;
            public string ChildOne
            {
                get { return _childOne; }
                set
                {
                    _childOne = value;
                    NotifyOfPropertyChange(()=>ChildOne);
                }
            }
    
        }
    View Code

    运行:

     默认情况下,CM的Convention是默认开启的,可使用ViewModelBinder.ApplyConventionsByDefault = false;来关闭,或者直接使用通常写法,会自动覆盖Convention的自动绑定。

    有些时候,在碰到一个属性绑定多个控件等问题时,用起来就不那么顺手了。所以平时也不太会使用此特性。

    后面准备介绍一下数据绑定(Binding)和事件响应(Command)两大块的实现方式。

    源码文件:http://pan.baidu.com/s/1gfHyhQN

  • 相关阅读:
    JavaScript中的变量及数据类型
    EasyUI——常见用法总结
    MVC页面重定向'页面跳转
    window.location.href的用法
    MVC JsonResult的用法
    Knockoutjs快速入门(经典)
    Knockoutjs的环境搭建教程
    4位双扫描、8位单扫描
    存储周期(存取周期)
    c语言中static、extern、void的重载
  • 原文地址:https://www.cnblogs.com/kuangxiangnice/p/7040157.html
Copyright © 2011-2022 走看看