01

Caliburn.Micro简介


Caliburn.Micro是一套基于XAML的MVVM模式的开发框架,它小巧而强大。在CaliburnMicro中只需要按照约定把View的名字加上后缀ViewModel,就是它的View Model 的名字,如:MainPage和 MainPageViewModel。Caliburn.Micro自动把ViewModel绑定到View的DataContext。如果ViewModel 的属性名和控件的名称相同,那么就会自动绑定上。


MVVM 简介


MVVM源于微软的软件开发架构模式。MVVM的开发基于事件驱动,实现UI层和逻辑层的分离,从而使UI设计人员和程序员各施其职。MVVM中的View Model在Model和View之间扮演着值换器的角色,把Model的数据交给View去绑定,把View的数据提交给Model;同时也要实现mediator设计模式,成为View和Model之间的逻辑协调者。


02


以下是一个关于Caliburn.Micro简短的列表:

Action消息:


操作机制允许您将UI触发器(如按钮的“单击”事件)“绑定”到视图模型或演示器上的方法。该机制还允许向方法传递参数。参数可以数据绑定到其他框架元素,也可以传递特殊值,例如DataContext或EventArgs。所有参数都会自动换为方法的签名。此机制还允许“Action.Target”独立于DataContext而变化,并允许在UI中的不同点从触发器声明它。当触发器发生时,“消息”在元素树中冒泡,寻找能够调用指定方法的Action.Target(处理程序)。这就是为什么我们称之为信息。动作消息的“冒泡”特性非常强大,非常有用,尤其是在主/细节场景中。除了调用之外,该机制还支持“CanExecute”保护。如果该操作具有同名的相应属性或方法,但前面有“Can”一词,则该操作的调用将被阻止,UI将被禁用。操作还支持协同路由(见下文)。这对于现有的Caliburn用户来说都是相当标准的,但是我们在Caliburn.Micro上做了一些改进,这将进入更大的框架。ActionMessages的Caliburn.Micro实现构建在System.Windows.Interactivity上。这允许由社区开发的任何TriggerBase触发操作。此外,Caliburn.Micro的动作在Blend中有充分的设计支持。以代码为中心的开发人员会很高兴知道Caliburn.Micro支持非常简洁的语法,通过一个名为Message.Attach的特殊附加属性来声明这些ActionMessages。


Action 约定


开箱即用,我们支持围绕ActionMessage特性的一组绑定约定。这些约定基于x:Name。因此,如果您在ViewModel上有一个名为“Save”的方法,在UI中有一个名为“Save”的按钮,我们将自动为“Click”事件创建一个EventTrigger,并为“Save”方法分配一个ActionMessage。此外,我们将检查方法的签名并正确构造ActionMessage参数。可以关闭或自定义此机制。您甚至可以更改或添加不同控件的约定。例如,如果您确实需要,您可以为按钮“MouseMove”而不是“Click”创建约定事件。


Binding 约定

我们还支持基于约定的数据绑定。这也适用于x:Name。如果ViewModel上的属性与元素同名,我们将尝试对其进行数据绑定。虽然框架了解操作的约定事件,但它还了解约定绑定属性(您可以自定义或扩展)。当绑定名称匹配时,我们将继续执行几个步骤来构建绑定(所有这些步骤都是可自定义的),配置诸如BindingMode、StringFormat、ValueConverter、Validation和UpdateSourceTrigger(也适用于SL TextBox和PasswordBox)等详细信息。最后,我们支持为某些场景添加自定义行为。这允许我们根据命名模式检测是否需要自动生成数据模板或连接选择器的ItemsSource和SelectedItem。


Screens 和Conductors

Screen、ScreenConductor和ScreenCollection模式支持基于模型的活动或当前项目跟踪,强制执行屏幕生命周期,并在应用程序中优雅地关闭或取消关闭。Micro对这些模式的实现是Caliburn中的模式的演变,支持执行任何类型的类,而不仅仅是IScreen的实现。这些改进正在重新引入Caliburn。你会发现Caliburn.Micro的屏幕实现非常彻底,甚至可以轻松处理异步关机场景。


Event Aggregator(事件聚合器)


Micro的EventAggregator简单而强大。聚合器遵循总线样式的发布/子模型。您向聚合器注册了一个消息处理程序,它会向您发送您感兴趣的任何消息。您可以通过实现IHandle来声明您对特定消息类型的兴趣。对处理程序的引用被弱持有,发布发生在UI线程上。我们甚至支持多态订阅。


Coroutines协同程序

任何操作都可以选择返回IResult或IEnumerable,这为处理异步编程的强大方法打开了大门。此外,IResult的实现可以访问执行上下文,该上下文告诉它们执行的是什么ActionMessage、哪个FrameworkElement触发了要发送的消息、ActionMessage由哪个实例处理(在上调用)以及该实例的视图是什么。这种上下文信息支持一种松散耦合的声明性机制,通过这种机制,演示者或视图模型可以与其视图进行通信,而无需在任何时候保持对视图的引用。


View 定位器

对于应用程序中的每个ViewModel,Caliburn.Micro都有一个基本策略来定位应该渲染它的视图。我们是根据命名约定来做这件事的。例如,如果您的VM名为MyApplication.ViewModels.ShellViewModel,我们将查找MyApplication.Views.ShellView。此外,通过在Xaml中附加View.Context,我们支持同一视图模型上的多个视图。因此,给定与上面相同的模型,但使用View.Context=“Master”我们将搜索MyApplication.Views.Shell.Master。当然,所有这些都是可定制的。


View Model 定位器

尽管Caliburn.Micro支持ViewModel First方法,但我们也通过提供与ViewLocator具有相同映射语义的ViewModelLocator来支持View First。


Window Manager窗口管理器

此服务提供以视图模型为中心的窗口显示方式(Silverlight中的ChildWindow、WPF中的Window、Windows Phone中的自定义本机样式主机)。只需向它传递一个VM实例,它就会找到视图,必要时将其包装在窗口中,应用您配置的所有约定并显示窗口。


PropertyChangedBase 和BindableCollection

如果没有INotifyPropertyChanged的基本实现,什么自尊的WPF/SL框架可以实现?Micro实现支持基于字符串和lambda的更改通知。它还确保在UI线程上引发所有事件。BindableCollection是一个简单的集合,它继承自ObservableCollection,但也确保在UI线程上引发其所有事件。


Bootstrapper引导程序

配置此框架并使其启动和运行需要什么?不多只需从Bootstrapper继承并将自定义Bootstrapper的实例添加到应用程序的ResourceDictionary中。完成。如果需要,可以重写一些方法来插入自己的IoC容器,声明应该检查哪些程序集的视图,等等。这非常简单。


Logging

Caliburn.Micro实现了一个基本的日志抽象。这在任何鼓励约定而不是配置的严肃框架中都很重要。该框架的所有最重要部分都包含日志记录。想知道应用或不应用哪些约定吗?打开日志记录。想知道正在执行哪些操作吗?打开日志记录。想知道正在发布哪些事件吗?打开日志记录。你明白了。


MVVM 和MVP

如果不明显,这个框架支持MVVM。MVVM本身并不难,但Caliburn.Micro努力超越简单的实现。我们希望编写优雅的、可测试的、可维护的和可扩展的表示层代码……我们希望这样做很容易。这就是为什么。如果您更喜欢使用监控控制器和被动查看而不是MVVM,请继续。你会发现Caliburn.Micro可以帮助你很多,特别是它的Screen/ScreenConductor实现。如果你对我刚才提到的任何目标都不感兴趣,你最好继续前进。这个框架不适合你。


要清楚的是,这不是一个玩具框架。正如我所说,我真正关注的是支持Caliburn v2的核心和最常用的功能。事实上,Caliburn.Micro将是我前进的默认框架,我建议,如果你开始一个新项目,你就从Micro框架开始。我一直很小心地使ApplicationDeveloperAPI与Caliburn的完整版本保持一致。事实上,我在Caliburn.Micro中所做的改进正在被重新折叠到Caliburn v2中。那有什么好处?您可以开始使用Caliburn.Micro进行开发,然后,如果您遇到边缘情况或有其他需要移到Caliburn,您将能够在应用程序中进行少量更改或不进行任何更改。


原文标题:Caliburn.Micro Xaml made easy


翻译:dotnet编程大全