在 Caliburn.Micro 裡,設定 Event 非常方便,本篇文章將列出幾個常用的方法。
首先看看下列的 XAML 檔,當中只有一個按鈕,而且沒有設定 event。
<Page
x:Class="CaliburnDemoApp2.EventTestPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:caliburn="using:Caliburn.Micro"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid>
<StackPanel>
<Button x:Name="TestButton1" Content="Event1"/>
</StackPanel>
</Grid>
</Page>
接下來在對應的 view model 中(EventTestPageViewModel),加入以下 method:
public async void TestButton1()
{
MessageDialog dialog = new MessageDialog("Test1");
await dialog.ShowAsync();
}
執行之後,按下按鈕,就會直接執行 TestButton1 這個 method。
而另一種設定方式如下:
<Button x:Name="TestButton2" Content="Event2"
caliburn:Message.Attach="[Event Click] = [Action TestEventMethod()]"/>
Event 後面接的是事件名稱,而 Action 後面代表的是 view model 中的 method,例如 $view,範例如下:
<Button x:Name="TestButton3" Content="Event3"
caliburn:Message.Attach="[Event Click] = [Action TestButton3($view)]"/>
method 如下:
public void TestButton3(object view)
{
EventTestPage page = view as EventTestPage;
}另外,在設定 Event 時,還可以將其它控制項的屬性當成參數,例如下面按鈕的設定,是將 Name 為 TextBox1 的 TextBox 控制項當做參數。
<Button x:Name="TestButton4" Content="Event4"
caliburn:Message.Attach="[Event Click] = [Action TestButton4(TextBox1)]"/>Caliburn.Micro 預設會將 TextBox 中的 Text 屬性當做參數,所以 method 可以這樣訂:
public async void TestButton4(string text)
{
MessageDialog dialog = new MessageDialog(text);
await dialog.ShowAsync();
}
最後說明常用的 ListView,設定它的 ItemClick Event,會需要用到 $eventArgs,例如下面的設定方式:
<ListView ItemsSource="{Binding DataList}"
IsItemClickEnabled="True"
SelectionMode="None"
caliburn:Message.Attach="[Event ItemClick] = [Action ListViewItemClick($eventArgs)]" ItemClick="ListView_ItemClick">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>透過這樣的設定,就可以將 ItemClickEventArgs 物件傳進 method裡。
文章標籤
全站熱搜
