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顯示計數屬性的默認值。
等一下…好神奇啊! 我不記得有設置過任何綁定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應用程序。