前言
3.29号有发过一篇
上次哪个章节忘记贴app.XAML的代码,不过源码里面可以看到,这节补上.
<Application x:Class="WpfApp8.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp8"><Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary><local:MyBootstrapper x:Key="bootstrapper"/></ResourceDictionary></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources></Application>
详细介绍了一个最简单的Caliburn.Micro框架如何搭建起来,今天我们接着上次的话题继续讲解。
操作效果图如下:(界面只为方便讲解说明,没有做美观优化,凑合着看)

remark:gif动图采用ScreenToGif制作,官网下载地址https://pc.qq.com/detail/13/detail_23913.html
仅仅看界面,貌似看不出啥优势,但是我告诉你再这个框架下
①单击事件不用去添加代码绑定到控件,直接通过控件名称就可以自动匹配;
②属性变更不需要添加代码去通知界面,viewmodel只需要继承Screen这个类就行了。
神奇吧?不觉得神奇的话那麻烦你先去b站看一下刘铁猛的mvvm如何搭建的,看看哪个框架下的属性变更和命令执行是怎么操作的,过来再做一下对比。
接下来看下后台代码:
using Caliburn.Micro;using System.Windows;using System.Windows.Input;namespace WpfApp8{//[AddINotifyPropertyChangedInterface] 因为Screen 继承了INotifyPropertyChanged 所以这句就不用加了class StartViewModel : Screen{public StartViewModel(){}public string btnStr { get; set; } = "1111";public string lblStr { get; set; } = "2222";public void testBtn(){btnStr = "you hit mine! i am button";}public void btnCtrl1(){lblStr = "you hit mine! i am lable";}public void StartView_MouseDown(object sender, MouseButtonEventArgs e){MessageBox.Show("我是MouseDown事件!");}}}
代码简洁到让人发指,这个框架就是这么酸爽!
关于属性变更通知界面说明:
①只要你的类继承了Screen,或者直接继承INotifyPropertyChanged这个接口,类中所有的属性变更就会自动通知界面,无需再去手动没每个属性附加NotifyPropertyChanged("字段名");
②如果你既不想继承Screen又不想继承NotifyPropertyChanged,那还有一种方式,就是再nuget上搜索安装

安装ok以后,引用对应的域名空间
然后再类的外层添加[AddINotifyPropertyChangedInterface] 也是可以给所有属性变更附加上通知界面的功能的。
事件绑定:
这个框架下单击事件是可以自动匹配,不需要绑定,但是其它事件还是需要手动绑定的,绑定方法
cal:Message.Attach="[Event MouseDown]=[StartView_MouseDown($source,$eventArgs)];",需要引用
xmlns:cal="http://www.caliburnproject.org"后台:
public void StartView_MouseDown(object sender, MouseButtonEventArgs e){}
以上就是本节的全部内容,下期我们再会!
项目源码下载地址:
链接: https://pan.baidu.com/s/168BJwGWjPejRT8dV5u4cpg
提取码: dksr