Caliburn.Micro Xaml made easy

Cheat Sheet

This serves as a quick guide to the most frequently used conventions and features in the Caliburn.Micro project.

Wiring Events

This is automatically wiring events on controls to call methods on the ViewModel.


<Button x:Name="Save">

This will cause the Click event of the Button to call “Save” method on the ViewModel.

Short Syntax

<Button cal:Message.Attach="Save">

This will again cause the “Click” event of the Button to call “Save” method on the ViewModel.

Different events can be used like this:

<Button cal:Message.Attach="[Event MouseEnter] = [Action Save]">

Different parameters can be passed to the method like this:

<Button cal:Message.Attach="[Event MouseEnter] = [Action Save($this)]"> 
Passes the EventArgs or input parameter to your Action. Note: This will be null for guard methods since the trigger hasn’t actually occurred.
Passes the DataContext of the element that the ActionMessage is attached to. This is very useful in Master/Detail scenarios where the ActionMessage may bubble to a parent VM but needs to carry with it the child instance to be acted upon.
The actual FrameworkElement that triggered the ActionMessage to be sent.
The view (usually a UserControl or Window) that is bound to the ViewModel.
The action's execution context, which contains all the above information and more. This is useful in advanced scenarios.
The actual UI element to which the action is attached. In this case, the element itself won't be passed as a parameter, but rather its default property.

Long Syntax

<UserControl x:Class="Caliburn.Micro.CheatSheet.ShellView"
        <TextBox x:Name="Name" />
        <Button Content="Save"> 
                <i:EventTrigger EventName="Click"> 
                    <cal:ActionMessage MethodName="Save"> 
                       <cal:Parameter Value="{Binding ElementName=Name, Path=Text}" /> 

This syntax is Expression Blend friendly.


This is automatically binding dependency properties on controls to properties on the ViewModel.


<TextBox x:Name="FirstName" />

Will cause the “Text” property of the TextBox to be bound to the “FirstName” property on the ViewModel.


<TextBox Text="{Binding Path=FirstName, Mode=TwoWay}" />

This is the normal way of binding properties.

Event Aggregator

The three different methods on the Event Aggregator are:

public interface IEventAggregator {  
    void Subscribe(object instance);  
    void Unsubscribe(object instance);  
    void Publish(object message, Action<System.Action> marshal);  

An event can be a simple class such as:

public class MyEvent {
    public MyEvent(string myData) {
        this.MyData = myData;

    public string MyData { get; private set; }