Caliburn.Micro 傑的入門教程3,事件和參數

Caliburn.Micro 傑的入門教程1(翻譯)
Caliburn.Micro 傑的入門教程2 ,瞭解Data Binding 和 Events(翻譯)
Caliburn.Micro 傑的入門教程3,事件和參數
Caliburn.Micro 傑的入門教程4,事件聚合器
Caliburn.Micro 傑的入門教程5,窗口管理器
Caliburn.Micro 傑的入門教程6, Screens 和 Conductors 簡介


 Caliburn Micro Part 3: More About Events and Parameters

http://www.mindscapehq.com/blog/index.php/2012/1/24/caliburn-micro-part-3-more-about-events-and-parameters/ php


在今天的教程中,咱們將看一看的更先進的事件綁定方法並指定事件參數。 嘗試這些特性,咱們將會進一步擴展在前面的兩個博客中建立的應用程序。html

你可能記得上篇博客,咱們經過Caliburn.Micro提供的自動關聯控件的name特性,關聯對應的事件。 全部咱們須要作的僅僅是在一個View視圖中設置按鈕的名稱,而後在與之對應的ViewModel視圖模型中添加與name名稱徹底相同的一個方法。 而後該按鈕的單擊事件將會自動鏈接調用適當的方法。 然而有時你須要顯式地鏈接事件。爲了提供事件參數或指定您想要使用哪些事件。 爲此,Caliburn Micro提供了長語法和一個簡短的語法兩種實現方式。 長語法的優勢是它與Microsoft Expression Blend的相容性。 簡短的語法就更碉堡了,若是你對設計不感興趣,想簡單明瞭的辦事。 下面讓咱們開始學習如何使用語法。ide

1. Long Syntax(長語法)學習

 最好的方法是修改現有的應用程序以使用長語法不改變當前的行爲。
打開AppView.xaml項目文件,添加這兩個命名空間:
flex

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:cal="http://www.caliburnproject.org"

而後, 將repeat button按鈕進行修改:spa

<RepeatButton Content="Up" Margin="15" VerticalAlignment="Top">
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="Click">
      <cal:ActionMessage MethodName="IncrementCount" />
    </i:EventTrigger>
  </i:Interaction.Triggers>
</RepeatButton>

運行應用程序,您將看到它看起來和以前同樣的行爲。 咱們所作的是System.Windows.Interactivity下triggers的交互觸發事件方法。 EventTrigger咱們能夠指定哪一個事件咱們想監聽,經過Caliburn Micro的ActionMessage咱們能夠指定哪些方法應該調用。 使用這種方法可使用相同的控制包含任意數量的事件觸發監聽其餘事件。 因此你能夠監聽MouseEnter、MouseLeave等等用於執行額外的操做。翻譯

接下來讓咱們看看事件參數。 爲了證實這一點,咱們將添加另外一個按鈕,增量計數2。 在AppViewModel中,咱們須要修改IncrementCount方法加入一個整數參數。 這個參數將用於改變Count屬性。 IncrementCount方法如今看起來像這樣:設計

public void IncrementCount(int delta)
{
   Count += delta;
}

回到AppView,更新現有的repeat button按鈕,給ActionMessage添加一個Caliburn Micro Parameter參數,以下:code

<cal:ActionMessage MethodName="IncrementCount">
  <cal:Parameter Value="1" />
</cal:ActionMessage>

如今,當按鈕被按下時,它會將值做爲參數傳遞給IncrementCount方法。 另外一個按鈕添加到應用程序的參數2,而後運行該應用程序。 點擊不一樣的按鈕將增量計數的值根據他們不一樣的參數。 的價值屬性的石中微觀參數是一個依賴項屬性,這意味着它還支持WPF數據綁定。 這容許您使用它在你遇到各類不一樣的場景。orm

專家提示:因爲flexibity使用數據綁定設置參數值,能夠經過UI元素從視圖模型。 你應該儘可能避免這樣作,你可能能夠! UI元素的視圖模型能夠斷裂MVVM建築風格,可能致使將來的維護問題。

(此處翻譯不清晰,我原本就不熟悉,不過這一段對於理解干擾不大)

2. Short Syntax(短語法)

如今學習如何使用簡單的語法來作一樣的事情。 看看這個,讓咱們從一個應用程序的最新副本開始,沒有咱們剛纔的長語法實現。 咱們將開始再次經過修改應用程序在不改變目前的行爲。 此次咱們只須要添加Caliburn Micro命名空間,並修改RepeatButton 按鈕:

<RepeatButton Content="Up" Margin="15" VerticalAlignment="Top"
              cal:Message.Attach="[Event Click] = [Action IncrementCount]" />

全部咱們所作的是使用一個Caliburn Micro的附加屬性(Message.Attach)指定咱們感興趣的事件,和要調用的方法。

接下來,咱們看看簡短的語法的事件參數使用方法。 和長語法的作法同樣,修改IncrementCount方法。 加入一個Message.Attach事件參數使用消息。 將會看起來像這樣:

cal:Message.Attach="[Event Click] = [Action IncrementCount(1)]"

事件的參數寫在方法名稱的方括號後。 我相信你能解決如何添加一個按鈕,每次增長2的值。

簡單語法,甚至支持數據綁定的一種特殊形式。 爲了證實這一點,讓咱們添加一個按鈕,增量的值是統計值自己。 換句話說,一個按鈕,雙倍增長計數的值。 您能夠刪除前面的博文中提到的價值高於100的那個CanIncrementCount事件監聽。 重複按鈕代碼看起來是這樣的:

<RepeatButton Content="Double" Margin="15"
              cal:Message.Attach="[Event Click] = [Action IncrementCount(Count.Text)]" />

這裏我將參數設置爲了Count.Text,也就是綁定到一個TextBlock控件(name是「Count」)的「Text」屬性,用於顯示當前數值。注意這裏,Caliburn Micro會自動的將咱們傳入的string類型的參數,轉換成咱們想要的int類型的數據。Caliburn Micro還提供另外一種捷徑,它會自動使用控件相應的屬性,若是咱們沒有明確指定是哪一個屬性。

在上面的例子中,咱們能夠只寫在TextBlock控件的「name」做爲參數,Caliburn Micro將默認綁定到「Text」屬性。就像這樣:


3. Automatically Finding Parameters(自動關聯參數)

完成本教程時,我要提一下。當你不顯式設置它們的參數時,Caliburn Micro甚至有一套自動獲取參數約定。若是你沒有明確指定參數, Caliburn Micro會自動獲取,定義的方法簽名的(參數名稱),而後嘗試在View下的用戶控件中匹配這個名字(忽略大小寫)。一旦找到匹配的用戶控件,控件的適當的屬性就會被用來提供該參數。
舉例來講:好比用戶控件是一個TextBlock,Text屬性值將被用來做爲參數。以後, Caliburn Micro可自動字符(string)串轉換爲可能須要整數(int)等等。
爲了更容易理解這個」約定「,就讓咱們在程序中作一個嘗試。在程序中添加一個Slider(控件),命名爲」Delta「,再添加一個Button(控件),命名爲」IncrementCount「,正如之前的博客所說,該按鈕被點擊時會自動調用IncrementCount方法。但此次,該方法有一個參數,並且咱們並無爲這個按鈕指定任何其餘的關聯。可是請注意,咱們添加Slider時,使用了和方法參數相同的名稱(Delta)。所以只要單擊該按鈕,Caliburn Micro將自動使用Slider控件的Value屬性做爲參數方法。下面是須要添加的代碼:

<UniformGrid Columns="2" VerticalAlignment="Bottom">
  <Slider Name="Delta" Minimum="0" Maximum="5" Margin="15" />
  <Button Name="IncrementCount" Content="Increment" Margin="15" />
</UniformGrid>

4.Extra for Experts(額外的專家級知識點)

這裏,我只列舉一些Caliburn Micro提供的掛接事件的支持(hooking up events)

  • Setting action targets(設置行爲參數)
  • Special parameter values for data binding(數據綁定的一些特殊參數)
  • Action bubbling(冒泡行爲)
  • Action guards with parameters(行爲監視與參數)

-----如下爲其餘內容,和本節教程關係不大,就不本身翻譯修改了,請大致看看,若是須要請跳轉到原文:

你能夠找到有關使用Caliburn微從在線文檔掛接事件的更多信息。我建議經過文檔閱讀這樣能夠更好地選擇哪些方法用於在應用程序中各類事件的狀況。你會發現有不少的有用的支持是Caliburn科技提供,和不少便利的約定,將採起工做過你的肩膀。該小抄是一個有用的網頁書籤。你還會發現,HelloExplicitAction,HelloParameters和BubblingAction樣品是知識的良好來源。你能夠從這個教程中使用的演示從這裏長的語法,並從這裏短語法下載該應用程序。

相關文章
相關標籤/搜索