These are a couple of Live Templates for Resharper that help with some of the property declarations to work with Caliburn.Micro (the WPF framework originally from Rob Eisenberg).
I just use the naming convention CM followed by the purpose of the template. Both are available as a zip file via the link at the end of this article.
CMButton:
private bool _can$BUTTONNAME$; public bool Can$BUTTONNAME$ { get { return _can$BUTTONNAME$; } set { if (_can$BUTTONNAME$ == value) return; _can$BUTTONNAME$ = value; NotifyOfPropertyChange(() => Can$BUTTONNAME$); } } public void $BUTTONNAME$() { throw new NotImplementedException(); }
This creates both the Button action method and the Can<method name> flag which is automatically used by Caliburn.Micro to enable/disable the button.
Only one item to complete ($BUTTONNAME$) when you use the template. Usually typing c m b is enough to get the template selected.
If you enter the button name as Edit the resulting code is:
private bool _canEdit; public bool CanEdit { get { return _canEdit; } set { if (_canEdit == value) return; _canEdit = value; NotifyOfPropertyChange(() => CanEdit); } } public void Edit() { throw new NotImplementedException(); }
Saves a whole load of typing! In the XAML you use x:Name = “Edit” in the <Button /> declaration and Caliburn.Micro does the rest.
CMProperty
private $TYPE$ _$BACKINGFIELD$; public $TYPE$ $PROPERTYNAME$ { get { return _$BACKINGFIELD$; } set { _$BACKINGFIELD$ = value; NotifyOfPropertyChange(()=>$PROPERTYNAME$ ); } }
Slightly more complex than CMButton. This has three values: $TYPE$, $BACKINGFIELD$ and $PROPERTYNAME$. However, only $TYPE$ and $BACKINGFIELD$ need to be input – $PROPERTYNAME$ is generated from $BACKINGFIELD$.
$TYPE$ is the first item asked for – a drop down list of available Types will appear.
As $BACKINGFIELD$ is private start the name in lower case. The $PROPERTYNAME$ is produced with an Upper case first letter. So if you type firstName the property name will be FirstName.
private String _firstName; public String FirstName { get { return _firstName; } set { _firstName = value; NotifyOfPropertyChange(() => FirstName); } }
And you have your property ready to link to a TextBox (x:Name item again) with Caliburn.Micro.
NotifyOfPropertyChange is a Caliburn.Micro method.
Download the zipped templates.
Save and extract from the zip file. Then import into Resharper Live Templates:
Resharper | Templates Explorer | Live Templates | select C# Scope | Import
I hope that these are useful for some Caliburn.Micro developers.