Introduction to MetaProperties

MetaProperties is a .NET library written in C# and published free of charge. It is hoped that software engineers will find it a helpful addition to their arsenal, and that their lives will be made slightly easier by using it.

The library uses the concept of MetaProperties to simplify a wide range of programming tasks, for example:
  • Creating event driven architectures
  • Simplifying threading models
  • Optimizing the display of rapidly changing data
  • Simplifying the mapping between application models and view models

What is a MetaProperty?

A MetaProperty is an extension of the standard .NET property, one which provides more information about the both the property itself and how it changes over time.

This is not an original concept; there already exists a PropertyInfo class in the FCL and the INotifyPropertyChanged interface allows classes to raise events when properties change.

However it is the implementation that is important, and MetaProperties improves over the default implementations in a number of important ways:
  • MetaProperties are very fast to access at runtime.
  • MetaProperties are both easier to use and more powerful than implementing INotifyPropertyChanged and INotifyPropertyChanging.
  • MetaProperties are type safe at compile time.
  • MetaProperties supports the isolation of event handlers, which stops untrusted or unknown event handlers from disrupting your code with exceptions.
  • MetaProperties supports automatic dispatching of events back to a specific thread.
  • MetaProperties supports the sampling of property changed events for rapidly changing data.
  • MetaProperties supports binding to other objects to simplify implementing the Model-View-ViewModel pattern.
  • MetaProperties is extensable.

What is the MetaProperties library?

The ''MetaProperties'' library can be split into three parts, which are outlined below.


The ''MetaProperties.Framework'' library defines a small set of interfaces which allow MetaProperties to be bound to and navigated.

The hope is that most extensions can support this simple framework without relying on any particular implementation (least of all my own).


''MetaProperties.Core'' is my implementation of ''MetaProperties.Framework''.

My own focus while implementing this has been on performance, event filtering, and isolation of event handlers. However it is by no means the only possible implementation.


All other libraries in the ''MetaProperties.*'' namespace are my extensions to framework, such as path tracking.

All other libraries in the ''MetaProperties.Core.*'' namespace are my extensions to functionality specific to my implementation of the framework, such as event filters.

What now?

If you want to find out more, have a look through the documenation on the previous page to get an overview of how to use MetaProperties and what it is capable of.

After that, download it and give it a try.

Last edited Mar 9, 2010 at 2:14 PM by jamesthurley, version 2


No comments yet.