天天看點

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/ 

在今天的教程中,我們将看一看的更先進的事件綁定方法并指定事件參數。 嘗試這些特性,我們将會進一步擴充在前面的兩個部落格中建立的應用程式。

你可能記得上篇部落格,我們通過Caliburn.Micro提供的自動關聯控件的name特性,關聯對應的事件。 所有我們需要做的僅僅是在一個View視圖中設定按鈕的名稱,然後在與之對應的ViewModel視圖模型中添加與name名稱完全相同的一個方法。 然後該按鈕的單擊事件将會自動連接配接調用适當的方法。 然而有時你需要顯式地連接配接事件。為了提供事件參數或指定您想要使用哪些事件。 為此,Caliburn Micro提供了長文法和一個簡短的文法兩種實作方式。 長文法的優點是它與Microsoft Expression Blend的相容性。 簡短的文法就更碉堡了,如果你對設計不感興趣,想簡單明了的辦事。 下面讓我們開始學習如何使用文法。

1. Long Syntax(長文法)

 最好的方法是修改現有的應用程式以使用長文法不改變目前的行為。

打開AppView.xaml項目檔案,添加這兩個命名空間:

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

然後, 将repeat button按鈕進行修改:

<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參數,如下:

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

現在,當按鈕被按下時,它會将值作為參數傳遞給IncrementCount方法。 另一個按鈕添加到應用程式的參數2,然後運作該應用程式。 點選不同的按鈕将增量計數的值根據他們不同的參數。 的價值屬性的石中微觀參數是一個依賴項屬性,這意味着它還支援WPF資料綁定。 這允許您使用它在你遇到各種不同的場景。

專家提示:由于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”屬性。就像這樣:

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

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>      
Caliburn.Micro 傑的入門教程3,事件和參數

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樣品是知識的良好來源。

你可以從這個教程中使用的示範從這裡長的文法,并從這裡短文法下載下傳該應用程式。

繼續閱讀