Caliburn.Micro的全面介紹

Caliburn.Micro (以下簡稱CM) 是一個輕量的MVVM框架,它專註於幫助.NET平台WPF, Silverlight和Windows Phone應用程序開發者實現模式驅動的應用程序。CM將關注點分離的設計哲學奉為圭臬,它從開發過程的不同方面提供了許多有用的功能,可幫助開發者編寫維護性更好、更乾淨的代碼。

一、簡介

Caliburn.Micro 的官方網站是 http://caliburnmicro.com/。 CM非常適合使用組件化、Mvvm、IoC開發模式的開發者。採用 CM 框架可使您的代碼更簡潔、更易於理解和維護。

二、常用功能

1. 通過命令綁定到View,實現了ViewModel與View之間的松耦合。

CM 提供了多種方式來實現命令綁定:Command, Message 和 Event 等。其中 Command方式是默認方式,消息和事件方式均可以通過視圖模型進行觸發以實現鬆散耦合。這些綁定機制都遵循“約定優於配置”的原則。


public class MyViewModel : Screen
{
    public void SayHello()
    {
        MessageBox.Show("Say Hello");
    }
}

2. 通過依賴注入,提供了一種可測試的方式進行開發。

Caliburn.Micro 默認集成 Simple Injector,也可以很容易地切換到其他IoC容器。以下是一個很簡單的示例:


public class MyAppBootstrapper : BootstrapperBase
{
    private readonly SimpleInjector.Container _container = new SimpleInjector.Container();

    protected override void Configure()
    {
        _container.RegisterSingleton();
        _container.RegisterSingleton();
        _container.RegisterSingleton();
        //Register ViewModels
        _container.Register();
    }
}

3. 通過消息,在ViewModel之間提供了一種鬆散耦合的方式進行通信。

當視圖模型不需要直接知道消息目標的時候,觸發消息會更加方便。視圖模型和消息目標可以同步或異步響應觸發消息。CM 通信機制支持實現 IHandle 接口的視圖模型進行事件的訂閱、取消訂閱和響應。以下是一個簡單的消息監聽和響應:


public class PublishViewModel : Screen, IHandle
{
    private readonly IEventAggregator _eventAggregator;

    public PublishViewModel(IEventAggregator eventAggregator)
    {
        _eventAggregator = eventAggregator;
        _eventAggregator.Subscribe(this);
    }

    public void Publish()
    {
        _eventAggregator.PublishOnUIThread(new MyMessage());
    }

    public void Handle(MyMessage message)
    {
        MessageBox.Show("Got the Message");
    }

    protected override void OnDeactivate(bool close)
    {
        base.OnDeactivate(close);
        _eventAggregator.Unsubscribe(this);
    }
}

三、MVVM應用

在MVVM模式中,應用程序按照模型、視圖模型和視圖的分層方式進行。CM框架可以大大提高開發人員的開發效率。開發人員只需要編寫ViewModel層,剩下的都會自動完成。

此外,CM 還提供了大量命令和事件,可用於更高級的MVVM應用場景。部分MVVM的實現內容如下:

https://github.com/canton7/Stylet

Stylet 是基於 Caliburn.Micro 和最新.NET Core的輕量級MVVM框架。 Stylet不僅支持WPF應用程序,而且完全支持通過 Avalonia XAML進行跨平台UI開發。

https://github.com/Caliburn-Micro/Caliburn.Metro

Caliburn.Metro 是將 Caliburn.Micro 和 Microsoft官方UI框架Metro 支持集成起來的庫,它使你在WPF應用中使用了漂亮的Metro界面。並且提供了一些常用組件以加速設計開發。

https://github.com/Caliburn-Micro/Caliburn.Fody

Caliburn.Fody是一個 Visual Studio 的擴展,它可以通過解決方案來自動添加PropertyChanged、OnPropertyChanged和OnPropertyChange方法。Caliburn.Micro 中通常我們要實現的一些方法就是在ViewModel中的屬性值發生更改時需要通知視圖。但這樣的處理過於繁瑣。Caliburn.Fody 是面向切面編程的思想,代碼上沒有任何修改,它會自動集成到編譯過程中。

https://github.com/ChernenkovS/Caliburn.Micro.StatePreservation

應用程序中涉及 Windows 的重啟、用戶清理等操作,會丟失之前用戶上下文的重要數據。Caliburn.Micro.StatePreservation庫可以幫助您在不依賴關鍵值的情況下將應用程序狀態保存並恢復到上次保存的狀態。

https://github.com/fabxoe/Caliburn.Ninject

Caliburn.Ninject是一個深度集成 Ninject 的依賴注入框架,它支持透明綁定和 UML圖生成。它可以在WPF應用程序中使用,並且完全有效。

除了這些應用框架之外,還有很多其他的組件和插件已經被開發出來。這些組件和插件可以在Github上找到。

結束語

Caliburn.Micro 是一個功能強大的框架,它提供了許多功能和工具,可以幫助您在WPF應用程序上實現MVVM模式。這篇文章介紹了CM的基礎概念和局限性,以及CM如何為各種MVVM應用程序開發提供支持。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/259518.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 16:29
下一篇 2024-12-15 16:29

相關推薦

  • Python應用程序的全面指南

    Python是一種功能強大而簡單易學的編程語言,適用於多種應用場景。本篇文章將從多個方面介紹Python如何應用於開發應用程序。 一、Web應用程序 目前,基於Python的Web…

    編程 2025-04-29
  • Python zscore函數全面解析

    本文將介紹什麼是zscore函數,它在數據分析中的作用以及如何使用Python實現zscore函數,為讀者提供全面的指導。 一、zscore函數的概念 zscore函數是一種用於標…

    編程 2025-04-29
  • 全面解讀數據屬性r/w

    數據屬性r/w是指數據屬性的可讀/可寫性,它在程序設計中扮演着非常重要的角色。下面我們從多個方面對數據屬性r/w進行詳細的闡述。 一、r/w的概念 數據屬性r/w即指數據屬性的可讀…

    編程 2025-04-29
  • Python計算機程序代碼全面介紹

    本文將從多個方面對Python計算機程序代碼進行詳細介紹,包括基礎語法、數據類型、控制語句、函數、模塊及面向對象編程等。 一、基礎語法 Python是一種解釋型、面向對象、動態數據…

    編程 2025-04-29
  • Matlab二值圖像全面解析

    本文將全面介紹Matlab二值圖像的相關知識,包括二值圖像的基本原理、如何對二值圖像進行處理、如何從二值圖像中提取信息等等。通過本文的學習,你將能夠掌握Matlab二值圖像的基本操…

    編程 2025-04-28
  • 瘋狂Python講義的全面掌握與實踐

    本文將從多個方面對瘋狂Python講義進行詳細的闡述,幫助讀者全面了解Python編程,掌握瘋狂Python講義的實現方法。 一、Python基礎語法 Python基礎語法是學習P…

    編程 2025-04-28
  • 全面解析Python中的Variable

    Variable是Python中常見的一個概念,是我們在編程中經常用到的一個變量類型。Python是一門強類型語言,即每個變量都有一個對應的類型,不能無限制地進行類型間轉換。在本篇…

    編程 2025-04-28
  • Zookeeper ACL 用戶 anyone 全面解析

    本文將從以下幾個方面對Zookeeper ACL中的用戶anyone進行全面的解析,並為讀者提供相關的示例代碼。 一、anyone 的作用是什麼? 在Zookeeper中,anyo…

    編程 2025-04-28
  • Python合集符號全面解析

    Python是一門非常流行的編程語言,在其語法中有一些特殊的符號被稱作合集符號,這些符號在Python中起到非常重要的作用。本文將從多個方面對Python合集符號進行詳細闡述,幫助…

    編程 2025-04-28
  • Switchlight的全面解析

    Switchlight是一個高效的輕量級Web框架,為開發者提供了簡單易用的API和豐富的工具,可以快速構建Web應用程序。在本文中,我們將從多個方面闡述Switchlight的特…

    編程 2025-04-28

發表回復

登錄後才能評論