.NET & Funky Fresh

Syndication

News

  • <script type="text/javascript" src="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&amp;MarketPlace=US&amp;ID=V20070822/US/bluspiconinc-20/8001/8b68bf4b-6724-40e7-99a5-a6decf6d8648"> </script>
Images in this post missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at imagehelp@codebetter.com
Introducing 'Caliburn': An MVC/MVP WPF Framework

Caliburn is a WPF framework geared towards the creation of testable, maintainable and extensible client applications.  It has strong support for MVC/MVP as well as many other features useful in the creation of a modern Windows application.  I started building an early version of this framework in the first quarter of last year for use on a WPF LOB my company was developing for a major state institution.  The framework turned out to be a boon for painlessly creating testable WPF applications.  A month or so ago I decided that the framework needed to be rebuilt in order to improve its design and to add a number of additional features; and to get it into a form that was acceptable for sharing with the larger .NET community.

In the process of building the new version, I spent some time studying other similar frameworks, which I had not done prior to building the original version.  I was pleasantly surprised to find out that several of my ideas were similar to the way the Cocoa framework functions.  I also spent some time looking at CAB and Acropolis and reading a variety of articles/blogs on related subjects.  It was my desire to build something that enables all of the above mentioned functionality but with a simpler usage story; one that feels like WPF and didn't force the use of special base classes, interfaces or custom property implementations.

On that note, you can find the full source code available for download under the MIT License at http://bluespire.com/svn/Caliburn/trunk/.  I hope you will download it and send me some feedback.  The current version still needs work, but I think you'll get the idea by playing around with the sample a bit.  I'm going to be spending several blog posts introducing and explaining the main features of the framework and I hope you'll stick with me and provide me with constructive criticism along the way.

Next week I have an exciting opportunity to sit down with Glenn Block, the p&p team and other WPF gurus to discuss the future of a similar framework that Microsoft is building.  Releasing this code gives me a great way to tangibly express to the p&p guys some of the things I have been thinking about and the techniques I have found useful in building WPF applications.  It is my desire that the p&p team 'steal' as many of the ideas in this framework as they need and that the readers of this blog give me as much feedback as possible as to whether the techniques contained therein are beneficial to anyone else besides me.

Below is a loose listing of the framework's features.  I will be going into detail as to how to use each of these features in future posts:

  • Loose messaging between WPF UI and POCO classes:
    • Use any class as a Presenter/Controller
    • Use any control/event/gesture to send messages to a Presenter.
    • Messages can carry data bound from WPF controls to be used as method parameters on a Presenter.
    • The return value of a Presenter's action can be bound back to the UI.
    • Presenter Actions can be automatically run asynchronously.
    • Presenter Actions can leverage automatic exception handling.
    • Presenter Actions can bubble up to parent presenters if actions are not handled.
  • Loose event pub/sub:
    • Use attributes or a traditional API to register publishers and subscribers.
    • Events can bubble, tunnel or move directly in the even hierarchy.
    • Subscribers can run handlers asynchronously or a publisher can specify all subscribers to run asynchronously.
    • Use any control/event/gesture to raise application events.  Use databinding to pass 'args' along.
  • Platform Abstractions
    • Interface based versions of MessageBox, OpenFileDialog and SaveFileDialog
    • more abstractions to come...
  • Markup Extensions
    • Extensions to make all the above easier to declare in Xaml
    • ResolveExtension for using the IoC container in Xaml
  • Static Gateway
    • All services are accessible through a configurable static gateway.
  • Testable
    • All framework services are interface based.
    • Stubs/Fakes and TestConfiguration provided for all services.
  • PresenterHost
    • Used to host a presenter in markup with runtime view selection.
    • Supports animated transitions between views over a presenter.
  • Module Based Architecture
    • Build your application as pluggable modules.
  • Shell Extension Mechanism
    • The shell can easily declare extension points.
    • Modules can extend the shell through a simple API.
  • Shell State Mechanism
    • The shell can track the state of various UI elements so they can be persisted across application loads.
    • Not limited to Window Size/Position.
    • Track module state across loads.
  • IoC/DI
    • Use Windsor
    • Use Spring.net
    • Use StructureMap (adapter is not quite complete)

NEXT POST - Caliburn: Action Messages


Posted 01-07-2008 10:39 AM by Rob Eisenberg

[Advertisement]

Comments

DotNetKicks.com wrote MVC/MVP Framework for WPF
on 01-07-2008 6:15 PM

You've been kicked (a good thing) - Trackback from DotNetKicks.com

Dan Crevier's Blog wrote A WPF Framework
on 01-07-2008 11:31 PM

Rob Eisenberg posted a new WPF Framework here . I haven't looked at it in detail, but it looks pretty

Noticias externas wrote A WPF Framework
on 01-08-2008 12:15 AM

Rob Eisenberg posted a new WPF Framework here . I haven&#39;t looked at it in detail, but it looks pretty

MSDN Blog Postings » A WPF Framework wrote MSDN Blog Postings &raquo; A WPF Framework
on 01-08-2008 12:50 AM

Pingback from  MSDN Blog Postings  &raquo; A WPF Framework

Bob wrote re: Introducing 'Caliburn': An MVC/MVP WPF Framework
on 01-08-2008 4:12 PM

Hey Rob, and instructions on how to download the source anonymously?  Svn is asking me for a username/password.

Rob Eisenberg wrote re: Introducing 'Caliburn': An MVC/MVP WPF Framework
on 01-08-2008 4:25 PM

That's strange.  I'm pretty sure it's set up for anonymous read access.  Give it another try and let me know if you are still having problems.

Rui wrote re: Introducing 'Caliburn': An MVC/MVP WPF Framework
on 01-09-2008 5:50 AM

I have the same issue accessing the source code

» Daily Bits - January 9, 2008 Alvin Ashcraft’s Daily Geek Bits: Daily links plus random ramblings about development, gadgets and raising rugrats. wrote &raquo; Daily Bits - January 9, 2008 Alvin Ashcraft&#8217;s Daily Geek Bits: Daily links plus random ramblings about development, gadgets and raising rugrats.
on 01-09-2008 9:35 AM

Pingback from  &raquo; Daily Bits - January 9, 2008 Alvin Ashcraft&#8217;s Daily Geek Bits: Daily links plus random ramblings about development, gadgets and raising rugrats.

WPFCAB has a competitor? « Tales from a Trading Desk wrote WPFCAB has a competitor? &laquo; Tales from a Trading Desk
on 01-09-2008 6:52 PM

Pingback from  WPFCAB has a competitor? &laquo; Tales from a Trading Desk

guidmaster´s .NET blog wrote links for 2008-01-10
on 01-10-2008 6:19 AM

Introducing &#39;Caliburn&#39;: An MVC/MVP WPF Framework - .NET &amp; Funky Fresh Caliburn is a WPF framework

Obonnate wrote re: Introducing 'Caliburn': An MVC/MVP WPF Framework
on 01-11-2008 4:43 PM

Hi Rob,

Your work seems really promising but I can't manage to download the source from CVS Tortoise. Looks like SVN doesn't want me to connect as anonymous. :-( Could you give me some more precise instructions ?

Thanks in advance,

la ciudadela » Blog Archive » Primeras impresiones sobre Caliburn wrote la ciudadela &raquo; Blog Archive &raquo; Primeras impresiones sobre Caliburn
on 01-13-2008 11:55 AM

Pingback from  la ciudadela  &raquo; Blog Archive   &raquo; Primeras impresiones sobre Caliburn

Wöchentliche Rundablage: ASP.NET MVC, ASP.NET 3.5, Data Services, C# 3.0, WPF, System.AddIn, AJAX… | Code-Inside Blog wrote W&ouml;chentliche Rundablage: ASP.NET MVC, ASP.NET 3.5, Data Services, C# 3.0, WPF, System.AddIn, AJAX&#8230; | Code-Inside Blog
on 01-14-2008 2:58 PM

Pingback from  W&ouml;chentliche Rundablage: ASP.NET MVC, ASP.NET 3.5, Data Services, C# 3.0, WPF, System.AddIn, AJAX&#8230; | Code-Inside Blog

Console.Write(this.Opinion) wrote Resumo da semana - 14/01/2008
on 01-14-2008 5:55 PM

Resumo da semana - 14/01/2008

Rob Eisenberg wrote re: Introducing 'Caliburn': An MVC/MVP WPF Framework
on 01-15-2008 9:39 AM

Just a wanted to note that I will be moving the source to a more permanent location soon, in order to fix some of the svn issues.

singh wrote re: Introducing 'Caliburn': An MVC/MVP WPF Framework
on 01-31-2008 12:44 AM

can you please guide me how i can download the source code...Thanks

Singh wrote re: Introducing 'Caliburn': An MVC/MVP WPF Framework
on 01-31-2008 3:24 AM

hi

can you please guide me to download the source code..

Thank you

singh wrote re: Introducing 'Caliburn': An MVC/MVP WPF Framework
on 01-31-2008 3:27 AM

hi

can you please guide to download source code..

Thank you

singh wrote re: Introducing 'Caliburn': An MVC/MVP WPF Framework
on 01-31-2008 3:29 AM

Hi

can you please guide me to download source code..

Thankyou

NARI wrote re: Introducing 'Caliburn': An MVC/MVP WPF Framework
on 02-02-2008 5:08 PM

I just found with caliburn what I'm searching for a while to build my projet. It seems that's you make with caliburn the rigth technology and patterns agregation to enable easy building of great WPF applications.

gOODiDEA wrote Interesting Finds: 2008.01.09
on 03-03-2008 8:49 PM

.NET: LargefileuploadsinASP.NET

Howto...movefromAjaxProtoASP.NETAJAXPageMethods

H...

This Week’s Geek Links (Mar. 7th, 2008) « Brian Di Croce wrote This Week&#8217;s Geek Links (Mar. 7th, 2008) &laquo; Brian Di Croce
on 03-09-2008 12:03 AM

Pingback from  This Week&#8217;s Geek Links (Mar. 7th, 2008) &laquo; Brian Di Croce

http://devlicious.com/blogs/rob_eisenberg/archive/2008/01/07/introducing-caliburn-an-mvc-mvp-wpf-framework.aspx wrote http://devlicious.com/blogs/rob_eisenberg/archive/2008/01/07/introducing-caliburn-an-mvc-mvp-wpf-framework.aspx
on 03-25-2008 4:27 AM
Bj??rn Rochel’s weblog » Blog Archive » Yet another way to do publish & subscribe . . . wrote Bj??rn Rochel&#8217;s weblog &raquo; Blog Archive &raquo; Yet another way to do publish &amp; subscribe . . .
on 06-30-2008 4:01 PM

Pingback from  Bj??rn Rochel&#8217;s weblog  &raquo; Blog Archive   &raquo; Yet another way to do publish &amp; subscribe . . .

Archive » Bj??rn Rochel???s weblog ?? Blog Archive ?? Yet another way to do … wrote Archive &raquo; Bj??rn Rochel???s weblog ?? Blog Archive ?? Yet another way to do &#8230;
on 07-02-2008 12:13 PM

Pingback from  Archive &raquo; Bj??rn Rochel???s weblog ?? Blog Archive ?? Yet another way to do &#8230;

Archive » Archive ?? Bj??rn Rochel???s weblog ?? Blog Archive ?? Yet another … wrote Archive &raquo; Archive ?? Bj??rn Rochel???s weblog ?? Blog Archive ?? Yet another &#8230;
on 07-03-2008 2:46 PM

Pingback from  Archive &raquo; Archive ?? Bj??rn Rochel???s weblog ?? Blog Archive ?? Yet another &#8230;

Archive » Archive ?? Archive ?? Bj??rn Rochel???s weblog ?? Blog Archive … wrote Archive &raquo; Archive ?? Archive ?? Bj??rn Rochel???s weblog ?? Blog Archive &#8230;
on 07-03-2008 5:56 PM

Pingback from  Archive &raquo; Archive ?? Archive ?? Bj??rn Rochel???s weblog ?? Blog Archive &#8230;

Archive » Archive ?? Archive ?? Archive ?? Bj??rn Rochel???s weblog ?? Blog … wrote Archive &raquo; Archive ?? Archive ?? Archive ?? Bj??rn Rochel???s weblog ?? Blog &#8230;
on 07-04-2008 1:48 PM

Pingback from  Archive &raquo; Archive ?? Archive ?? Archive ?? Bj??rn Rochel???s weblog ?? Blog &#8230;

Elise's blog wrote [WPF] Patterns : le MVC, le MV-VM, et le DM-V-VM ... au secours !
on 08-12-2008 7:06 AM

Après avoir participé à quelques projets WPF depuis maintenant un peu plus d'un an, je suis dans une

About The CodeBetter.Com Blog Network
CodeBetter.Com FAQ

Our Mission

Advertisers should contact Brendan

Subscribe
Google Reader or Homepage

del.icio.us CodeBetter.com Latest Items
Add to My Yahoo!
Subscribe with Bloglines
Subscribe in NewsGator Online
Subscribe with myFeedster
Add to My AOL
Furl CodeBetter.com Latest Items
Subscribe in Rojo

Member Projects
DimeCasts.Net - Derik Whittaker

Friends of Devlicio.us
Red-Gate Tools For SQL and .NET

NDepend

SlickEdit
 
SmartInspect .NET Logging
NGEDIT: ViEmu and Codekana
LiteAccounting.Com
DevExpress
Fixx
NHibernate Profiler
Unfuddle
Balsamiq Mockups
Scrumy
JetBrains - ReSharper
Umbraco
NServiceBus
RavenDb
Web Sequence Diagrams
Ducksboard<-- NEW Friend!

 



Site Copyright © 2007 CodeBetter.Com
Content Copyright Individual Bloggers

 

Community Server (Commercial Edition)