WPF and Caliburn.Micro are a powerful combination. You create a viewmodel and related view, name your controls appropriately and all magic happens automatically. Controls are bound to the View Model’s properties and methods for you. The problem is that it is all happing at run time not at design time. So when you are developing inside Visual Studio or Expression Blend you aren’t able to see how the form will look like with bound data.
Caliburn.Micro supports design-time binding out-of-the-box. How can we configure this?
In the constructor of my ViewModel, I check if we are executing in design time:
In this sample I populate my ViewModel with some sample data at design time.
In my view I added the following code:
I set the Bind.AtDesignTime property of Caliburn.Micro to true, create an ignorable alias “d” and assign an instance of my viewmodel to my design time datacontext.
And now we have nice design time support:
Caliburn.Micro supports design-time binding out-of-the-box. How can we configure this?
In the constructor of my ViewModel, I check if we are executing in design time:
public class SampleViewModel : Screen { public SampleViewModel() { if (Execute.InDesignMode) LoadDesignData(); } }
private void LoadDesignData() { this.Sessions.Add(new ProfilerSessionViewModel() { Id = Guid.NewGuid(), Duration = "30ms", Name = "Session 1", Started = DateTime.Now.AddMilliseconds(-30) }); this.Sessions.Add(new ProfilerSessionViewModel() { Id = Guid.NewGuid(), Duration = "30ms", Name = "Session 1", Started = DateTime.Now.AddMilliseconds(-30) }); this.Timings.Add(new TimingViewModel() { Duration = "30ms" }); /*Removed some lines*/ this.Queries.Add(new QueryViewModel() { CallStack = "", Duration = "10", NrOfRecordsAffected = 92, Query = "SELECT * FROM Products", QueryType = "ExecuteDataReader", Step = "Executing query", TimeFromStart = "3" }); }
In my view I added the following code:
<Window x:Class="VLM.SOFA.Profiling.Win.UI.ProfilerView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" xmlns:cal="clr-namespace:Caliburn.Micro;assembly=Caliburn.Micro" xmlns:vm="clr-namespace:VLM.SOFA.Profiling.Win.UI" d:DataContext="{d:DesignInstance Type=vm:SampleViewModel, IsDesignTimeCreatable=True}" cal:Bind.AtDesignTime="True"> </Window>
I set the Bind.AtDesignTime property of Caliburn.Micro to true, create an ignorable alias “d” and assign an instance of my viewmodel to my design time datacontext.
And now we have nice design time support: