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”屬性。就像這樣:

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樣品是知識的良好來源。
你可以從這個教程中使用的演示從這里長的語法,並從這里短語法下載該應用程序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM