[Windows Phone] Caliburn.Micro 的 Event 對應

在 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裡。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s