close
在 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裡。
全站熱搜