使用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>

public class ChildOneViewModel:Screen
    {
        public ChildOneViewModel()
        {
            ChildOne = "This is ChildOneView";
        }

        private string _childOne;
        public string ChildOne
        {
            get { return _childOne; }
            set
            {
                _childOne = value;
                NotifyOfPropertyChange(()=>ChildOne);
            }
        }

    }

运行:

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

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

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

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

时间: 2024-08-01 16:13:19

使用Caliburn.Micro系列2:Convention的相关文章

MVVM框架 -- Caliburn.Micro 系列文章

Caliburn.Micro 项目文档(翻译):Screens, Conductors and Composition Caliburn.Micro 杰的入门教程6, Screens 和 Conductors 简介 Caliburn.Micro 杰的入门教程5,Window Manager 窗口管理器 Caliburn.Micro 杰的入门教程4,事件聚合器 Caliburn.Micro 杰的入门教程3,事件和参数 Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和

Caliburn.Micro开发框架介绍 -- Windows phone

Caliburn.Micro开发框架介绍 Caliburn是一套基于XAML的开发框架,它小巧而强大.利用它不但能提高开发效率,还可以提高XAML程序开发的可维护行.可扩展性和可测试性.Caliburn.Micro则是专门针对Windows phone开发的版本. MVVM简介 MVVM源于微软的软件开发模式,可以粗略的认为它是MVC模式的发展,原来Controller的职能被拆分,其中值转换器(Value Converter)和绑定器(binder)已经由框架实现,程序员可以更关注在逻辑实现上

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

Caliburn.Micro学习笔记(二)----Actions

Caliburn.Micro学习笔记(二)----Actions 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions,看一下Caliburn.Micro给我们提供了多强大的支持 我们还是从做例子开始 demo的源码下载在文章的最后 例子1.无参数方法调用 点击button把textBox输入的文本弹出来 如果textbox里没有文本button不可点,看一下效果图 看一下前台代码 <Stac

Caliburn.Micro学习笔记(四)----IHandle&lt;T&gt;实现多语言功能

Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能 说一下IHandle<T>实现多语言功能 因为Caliburn.Micro是基于MvvM的UI与codebehind分离, binding可以是双向的所以我们想动态的实现多语言切换很是方便今天我做一个小demo给大家提供一个思路 先看一下效果 点击英文  变成英文状态点chinese就会变成中文                          源码的下载地址在文章的最下边 多语言用的是资源文件建

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle&lt;T&gt;

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T> 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现和源码 下一篇用它们做一个多语言的demo 这两个是事件的订阅和广播,很强大,但用的时候要小心发生不必要的冲突. 先看一下它的实现思想 在Caliburn.Micro里EventAggregator要以单例的形式出现这样可以

Caliburn.Micro学习笔记(五)----协同IResult

Caliburn.Micro学习笔记(五)----协同IResult 今天说一下协同IResult 看一下IResult接口 /// <summary> /// Allows custom code to execute after the return of a action. /// </summary> public interface IResult { /// <summary> /// Executes the result using the specif

Caliburn.Micro学习笔记目录——li-peng

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 Caliburn.Micro学习笔记(二)----Actions Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T> Caliburn.Micro学习笔记(四)----IHandle<T>实现多语言功能 Caliburn.Micro学习笔记(五)----协同IResult

Caliburn.Micro 资源随时添加

Caliburn.Micro – Hello World http://buksbaum.us/2010/08/01/caliburn-micro-hello-world/ http://blog.csdn.net/xbgzs2010/article/details/18447625 Caliburn.Micro 资源随时添加,布布扣,bubuko.com