Over the next several months I am going to be releasing various starter kits/samples for Caliburn. Each sample will demonstrate a different application style. I’ve factored each sample so that it has a reusable mini-framework, allowing developers to easily take the shell and start plugging in their own content. Each sample will also be accompanied by several blog posts explaining the architecture, use of Caliburn and various points of interest. The samples will be progressive in nature. I’ll talk about more “getting started with Caliburn” type material with the first sample than I will with later samples; those will focus more on various problem/solution topics.
The first sample I am releasing is a Silverlight Navigation Shell. Go on and get the source code.
- MVVM Approach
- Static Modules
- Lazy Modules (on demand load from Server)
- IoC Integration (using Unity but works equally with 7 containers without changing application code)
- Deep Linking (Browser History, Forward/Back Button and direct Url support; including lazy modules)
- Modal Dialogs
- Message Boxes
- Loader UI
- An IResult Library
- Navigations (including composite navigations)
- File Dialogs
- Message Boxes
- Customizable Dialog Chrome
- Resource Management
- Screen Lifecycle
- Passing Data to View Models
- Custom Screen Shutdown
- Convention over Configuration
- Hierarchical View Models
Above you can see an image of the interesting parts of the solution. The Framework project contains all the reusable components of the sample. All modules depend upon this framework, but have no dependency on the shell itself. The Baz project is an example of a lazy module. It only references the Framework, is not referenced by the shell and is downloaded on demand at runtime. Within the NavigationShell, however, you will find two static modules: Foo and Bar. Although they are part of the shell project, they actually have no dependencies on the shell’s implementation details, which is confined to the Shell namespace.
This solution is designed to be used as a starting point for navigation style applications. Simply remove the sample modules and begin adding your own. In the future, it will be included as part of the Caliburn source download and I will keep it up to date with future versions of the framework as well as extend it with additional functionality.
As I mentioned above, I am going to do several posts on this shell. You can look forward to digging into a few interesting details of the implementation and techniques soon.
What are you waiting for? Get the code.
12-03-2009 10:08 PM