In this edition of .NET Zone’s “Don’t Reinvent the Wheel” series, I' will take a look at some of the project templates and frameworks available for WPF and Silverlight. The majority of these frameworks are variations on the Model View ViewModel (MVVM) pattern, which lends itself to building maintainable applications. All of them are free and/or open source projects.
WPF Only : Feb 2010 Release for .NET 3.5
Author: MS WPF Team
From the CodePlex page:
The Model-View-ViewModel toolkit is intended to introduce the Model-View-ViewModel design pattern for building WPF applications to the broad WPF developer community.
WPF & Silverlight : Version 2 for .NET 3.5 & SL3 (v3 Alpha available for SL4/.NET4)
Author: Laurent Bugnion
What makes MVVM Light unique?
This toolkit puts a special emphasis on the "blendability" of the created application (i.e. the ability to open and edit the user interface into Expression Blend), including the creation of design-time data to enable the Blend users to "see something" when they work with data controls.
WPF Only : Not Released
Author: Josh Smith
Josh Smith also published an Advanced MVVM eBook here. A description of the framework from Josh’s blog:
Indispensable types for those of us building MVVM apps in WPF.
WPF Only : Version 0.2 for .NET 3.5
Author: Roman Golubin
Blub from CodePlex:
MVVM and Unity sample hows how to implement MVVM pattern using Unity container.
Silverlight 4 Only : Not Released
Author: Davide Zordan
Davide is working on a framework that incorporates the Managed Extensibility Framework. More info from CodePlex:
A simple Model-View-ViewModel (MVVM) implementation using Silverlight 4 and the Managed Extensibility Framework (MEF).
WPF & Silverlight : Initial Release Available
Author: David Kelley
The CodePlex project description summarizes its purpose:
A simple MVVM related framework for Silverlight (and probably works in WPF) for slow duck tape programmers like my self. Designed to be simple easy to use and easy to understand and idea for instructional purposes.
WPF Only : Version 184.108.40.206 Available
Author: Juergen Berchtel
Description from CodePlex:
The WPF Application Framework (WAF) is a lightweight Framework that helps you to create well structured WPF Applications. It supports you in applying a Layered Architecture and the Model-View-ViewModel (aka MVVM, M-V-VM, PresentationModel) pattern.
WPF & Silverlight : Version 1.1 RC
Author: Rob Eisenberg
Caliburn is slightly different in that it doesn’t directly implement any one design pattern. Read Rob’s description from the project site:
Designed to aid in the development of WPF and Silverlight applications, Caliburn implements a variety of UI patterns for solving real-world problems. Patterns that are enabled by the framework include MVC, MVP, Presentation Model (MVVM), Commands and Application Controller.
WPF Only : Not Released
Author: Sacha Barber
Sacha’s description of the Cinch framework:
Cinch is a fully featured WPF MVVM framework that makes it easier to develop rich MVVM WPF applications. It also provides UI services/threading/unit tests helpers and much more. Cinch is a WPF ModelView-ViewModel framework that takes the UI services route to provide a rich WPF MVVM framework that comes with several standard services out of the box as well as Unit test services. It also comes with a small demo app that illustrates how Cinch works.
Generic .NET Library : Not Released
Author: Mark Rendle
You can learn more about Microsoft’s Reactive Framework here. The MvvmRx project summary from Mark:
A Model-View-ViewModel implementation using the Reactive Framework from Microsoft DevLabs.
Silverlight Only : Version 3.4 for SL2 and SL3
Author: Nikhil Kothari
Nikhil’s description of his framework:
Silverlight.FX is an application framework for building Rich Internet Applications with Silverlight 2. It focuses on providing building blocks and controls that allows applications to be naturally well-architected.
General .NET Library : Version 3.0 for .NET 3.5 and SL2
Author: Clifford Hall
PureMVC has implementations in multiple languages and platforms. The C# port can be used with both WPF and Silverlight.
WPF & Silverlight : October 2009 Release for .NET 3.5 and SL3
Author: MS patterns & practices
Glenn Block worked on Prism before moving over to MEF, which is now part of the .NET Common Language Runtime team. Here is the overview of this patterns & practices project on CodePlex:
The Composite Client Application Guidance is designed to help you more easily build modular Windows Presentation Foundation (WPF) and Silverlight client applications. These types of applications typically feature multiple screens, rich, flexible user interaction and data visualization, and role-determined behavior. They are "built to last" and "built for change." This means that the application's expected lifetime is measured in years and that it will change in response to new, unforeseen requirements. This application may start small and over time evolve into a composite client—composite applications use loosely coupled, independently evolvable pieces that work together in the overall application. Applications that do not demand these features and characteristics may not benefit from the Composite Application Guidance.The guidance includes a reference implementation, reusable library code (called the Composite Application Library), documentation, QuickStarts, and Hands-On Labs.
Silverlight Only : Version 3.8.2 for SL3 Available
Author: Rockford Lhotka
Rocky has been working on his CSLA .NET Framework for years. He recently created a Silverlight port. What is CSLA?
CSLA .NET allows great flexibility in object persistence, so business objects can use virtually any data sources available. The framework supports 1-, 2- and n-tier models through the concept of mobile objects. This provides the flexibility to optimize performance, scalability, security and fault tolerance with no changes to code in the UI or business objects.
WPF Only : Not Released
Author: William Kempf
What makes Onyx unique?
Onyx uses a novel approach based on IServiceProvider which allows the ViewModel to interact with the View in an entirely decoupled and testable manner.