天天看點

Caliburn.Micro 傑的入門教程2 ,了解Data Binding 和 Events(翻譯)

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 2: Data Binding and Events

原文位址:

http://www.mindscapehq.com/blog/index.php/2012/1/16/caliburn-micro-part-2-data-binding-and-events/

接下來的這篇文章我們将看看Caliburn Micro協助我們綁定資料和事件。 我們将要建構的應用程式概述了在前面的部落格添加的一些簡單的使用者互動和資料顯示。

1. Data binding

我們先将應用程式顯示的資料存儲在Model中。 AppViewModel類的建立類似于上一篇博文。添加一個名為Count的屬性。 我們給一個預設值為50。 你可能還記得上次我們AppViewModel類繼承了Caliburn Micro提供的PropertyChangedBase粗加工的屬性更改通知。 而不是實作INotifyPropertyChanged接口,您可以在屬性的setter中簡單地調用NotifyOfPropertyChange方法:

public class AppViewModel : PropertyChangedBase
{
  private int _count = 50;
 
  public int Count
  {
    get { return _count; }
    set
    {
      _count = value;
      NotifyOfPropertyChange(() => Count);
    }
  }
}      

接下來,我們修改視圖來顯示這個屬性值。 在AppView.xaml中,添加一個TextBlock,如下:

<Grid MinWidth="300" MinHeight="300" Background="LightBlue">
  <TextBlock Name="Count" Margin="20" FontSize="150" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Grid>      

現在運作應用程式,看到TextBlock顯示計數屬性的預設值。

Caliburn.Micro 傑的入門教程2 ,了解Data Binding 和 Events(翻譯)

等一下…好神奇啊! 我不記得有設定過任何綁定TextBlock控件和Count屬性,然而TextBlock卻顯示了正确的資料!

注意,我設定了TextBlock控件的name特性和我們想綁定的Count屬性一樣的名字。 這是Caliburn.Micro提供的一個友善的捷徑。 TextBlock等元素,顯示資料或文本框,設定他們的名字比對屬性的資料模型将為您自動關聯起來。

2. Handling events

接下來,讓我們添加一個按鈕用來增加顯示的數值。 快速又無聊的方式是把一個按鈕的單擊事件處理器的名稱進行關聯。 然而,當使用MVVM模式通常最好(但不是絕對必要的)避免使用這種代碼後置的方法。 那麼讓我們來看看Caliburn Micro的處理事件特有的風格。

首先,在AppViewModel中添加一個遞增計數的方法,如下:

public void IncrementCount()
{
   Count++;
}      

之後,在AppView.xaml中添加一個按鈕,如下:

<Grid MinWidth="300" MinHeight="300" Background="LightBlue">
  <RepeatButton Name="IncrementCount" Content="Up" Margin="15" VerticalAlignment="Top" />
  <TextBlock Name="Count" FontSize="150" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Grid>      

現在運作應用程式并單擊按鈕,嘗試一下數字的增加效果。 這一次你會注意到,我們不需要做很多工作來綁定按鈕的單擊事件和IncrementCount方法。 對某些使用者界面控件,如按鈕,您可以簡單地設定的name特性,來控制你想要綁定的方法的名稱。 Caliburn Micro将自動綁定适當的使用者控件的事件模型中指定的方法。這一個按鈕示例中,Caliburn Micro會自動關聯Click事件。 (你也可以手動指定哪個事件連接配接到哪個方法,下次我們将看)。

3. Event guards

當Caliburn Micro自動關聯了Click事件和IncrementCount方法。便會自動尋找一個叫CanIncrementCount方法或屬性。 通過添加CanIncrementCount方法或屬性,您可以包括額外的邏輯,确定基于目前狀态是否允許事件處理模型。

我們在AppViewModel中,添加以下屬性:

public bool CanIncrementCount
{
  get { return Count < 100; }
}      

因為這個邏輯是基于Count屬性的值,我們還需要在CanIncrementCount計數值變化時,添加自動屬性更改通知。

可在Count屬性的setter中,添加這行代碼:

NotifyOfPropertyChange(() => CanIncrementCount);      

現在的Count屬性,就變成這樣:

public int Count
  {
    get { return _count; }
    set
    {
      _count = value;
      NotifyOfPropertyChange(() => Count);
      NotifyOfPropertyChange(() => CanIncrementCount);
    }
  }      

再次運作應用程式,将增量值增加到100。 每次Count增量增加,都會通過CanIncrementCount判斷可用性,一旦限制已經達到,按鈕将變成不可用,防止使用者進一步增加數值。

在本教程中我們看了幾個方法,了解Caliburn Micro的一些工作。 現在你可以更快地使用資料綁定,屬性更改通知、事件處理程式和事件監視,同時實作一個堅固的更容易測試和維護的MVVM應用程式。

繼續閱讀