天天看點

Caliburn.Micro簡介Caliburn.Micro簡介

Caliburn.Micro簡介

Action消息

  Action機制允許您将WPF觸發器(例如Button的“Click”事件)綁定到View Model或Presenter上的方法。該機制也允許将參數傳遞給該方法。參數可以資料綁定到其他WPF其他元素上,也可以傳遞特殊值,如DataContext或EventArgs。所有參數都會自動轉換為方法的簽名。該機制還允許“Action.Target”獨立于DataContext而變化,并使其能夠在WPF中與觸發器在不同點地方進行聲明。當觸發器觸發,“消息”将通過元素樹來尋找能夠調用指定方法的Action.Target(處理程式)。這就是為什麼我們稱之為消息。Action消息的“冒泡”性質非常強大,特别是在主/細節場景中非常有用。除了調用,該機制支援“CanExecute”守衛。如果Action具有相同的屬性或方法,具有相同的名稱,但在“Can”之前,則Action的調用将被阻止,WPF元素将被禁用。行動還支援協同程式(見下文)。這對于現有的Caliburn使用者來說都是相當标準的,但是我們在Caliburn.Micro中進行了一些改進,這些改進将進入更大的架構。Caliburn.Micro的Action消息基于System.Windows.Interactivity實作。這允許由社群開發的任何TriggerBase觸發動作。此外,Caliburn.Micro的Action在Blend中擁有完整的設計時間支援。

Action約定

  我們創造性地支援一組圍繞“Action消息”特性的綁定約定。這些約定基于x:Name。是以,如果在你的ViewModel裡面定義一個名為Save的方法,并在UI中定義一個名為Save的按鈕,我們将自動建立一個Click事件的EventTrigger,并為Save方法定義一個Action消息。此外,我們将檢查方法的簽名并正确建構ActionMessage參數。該機制可以關閉或定制。你甚至可以更改或天劍不同控件的約定。例如,你可以為Button的MouseMove添加約定來代替Click的約定。

Binding約定

  我們還支援基于約定的資料綁定。這也适用于x:Name。如果你的ViewModel裡的屬性與元素具有相同的名稱,我們将嘗試對它們進行資料綁定。我們可以通過步驟對約定進行配置,配置BindingMode,StringFormat,ValueConverter,Validation和UpdateSourceTrigger。

Screen和Conductors

  Screen,ScreenConductor和ScreenCollection模式支援在一個應用程式中對活動的目前元素進行基于model的跟蹤。Caliburn.Micro的這些模式的實作是Caliburn發現的一個演變,支援構造任何類型的類,而不僅僅是IScreen的實作的。這些改進正在引進Caliburn。你會發現Caliburn.Micro的Screen實作非常全面,甚至可以輕松處理異步關機。

Event Aggregator(事件聚合)

  Caliburn.Micro的EventAggregator簡單而強大。聚合器遵循總線式的pub/sub模型。你使用Aggregator注冊一個消息處理程式,并給你發送感興趣的消息。你可以通過實作IHandle來聲明你感興趣的消息類型。對處理程式的引用松耦合,publication産生于UI線程,并且我們支援多态subscription。

Coroutines(協同程式)

  任何Action都可以傳回IResult或IEnumerable類型,來實作強大的處理異步程式設計方法。此外,通過IResult的實作可以通路執行環境上下文,環境上下文告訴他們正在執行Action消息,什麼元素發送的消息,Action消息由哪個執行個體(被調用)以及該執行個體的View是什麼。這種上下文文實作松散耦合的聲明機制,通過該機制,Presenter或View-Model可以與其View進行通信,而不需要随時對其進行引用。

View 定位器

  應用程式中的每個ViewModel,Caliburn.Micro有一個基本政策來定位其對應的的View。我們基于命名約定來實作這一點。例如,如果你的VM為MyApplication.ViewModels.ShellViewModel,我們将尋找MyApplication.Views.ShellView。另外,我們通過在Xaml中附加View.Context來支援同一View-Model中的多個視圖。是以,假設上述的模型使用View.Context =“Master”,我們将搜尋MyApplication.Views.Shell.Master為其View。當然,這一切都是可定制的。

View Model定位器

  盡管Caliburn.Micro傾向于ViewModel-First通路,但我們也通過相同的映射語義在View中提供View Model來支援View-First。

視窗管理器

  該Window Manager提供了以View-Model為中心的方式來顯示Windows。通過簡單的傳遞一個VM的執行個體,它将定位視圖,如果需要,将其包裝在一個視窗中,應用你配置的所有約定并顯示視窗。

PropertyChangedBase和BindableCollection

  Caliburn.Micro實作支援字元串和基于lambda的更改通知。它還確定在UI線程上引發所有事件。BindableCollection是一個繼承自ObservableCollection的簡單集合,但是這樣可以確定在UI線程上引發其所有事件。

Bootstrapper

  需要配置那些東西才能使此架構啟動并運作?不多。隻需從Bootstrapper繼承,并将自定義Bootstrapper的執行個體添加到應用程式的ResourceDictionary中。完成。如果需要,可以覆寫幾種方法來插入您自己的IoC容器,聲明應該為Views檢查哪些程式集。這很簡單。

Logging

  Caliburn.Micro實作了基本的日志記錄抽象。在任何嚴格架構中鼓勵“約定大于配置的”,這一點非常重要。架構的所有最重要的部分都包含日志記錄。想知道哪些慣例是不适用的?打開日志記錄。想知道正在執行哪些動作?打開日志記錄。想知道什麼事件正在釋出?打開日志記錄。你得到的picture。

MVVM和MVP

  如果不明顯,該架構可以使用MVVM。MVVM本身并不難,但Caliburn.Micro不僅僅是實作它。我們想要編寫優雅,可測試,可維護和可擴充的表示層代碼…我們希望這樣做很容易。這就是這個。如果您更喜歡使用Supervising Controller和PassiveView而不是MVVM,請繼續。你會發現Caliburn.Micro可以幫助你很多,特别是它的Screen/ScreenConductor的實作。如果您對我剛才提到的任何目标不感興趣,這個架構不适合你。

  要清楚,這不是一個簡單架構。正如我所說,我真的專注于支援Caliburn v2的核心和最常用的功能。事實上,Caliburn.Micro将是我的預設架構,我建議如果您開始一個新的項目,您将從Micro架構開始。我一直非常小心使應用程式開發人員API與Caliburn的完整版本保持一緻。事實上,我在Caliburn.Micro的改進正在折疊成Caliburn v2。這是什麼好的部分?您可以開始使用Caliburn.Micro開發,那麼如果您遇到邊緣案件或者還有其他需要移植到Caliburn,那麼您的應用程式很少或根本就沒有改變。

源位址:http://caliburnmicro.com/documentation/introduction

繼續閱讀