Here are some nifty interfaces to think about when creating data objects that will be used in a WPF application. I’ve intentionally kept these descriptions very brief.
System.ComponentModel.INotifyPropertyChanged
This is probably one of the most common interfaces to implement in your data objects. Implementing this interface allows you to notify WPF that a property has changed when the data object is data bound.
System.ComponentModel.IDataErrorInfo
In .NET 3.5 WPF looks for this interface when data binding. This interface allows you to mark properties on your object as being in an erroneous state. On your Binding object set ValidatesOnDataErrors to true to enable this behavior.
System.ComponentModel.IEditableObject
In .NET 3.5 SP1 WPF included the IEditableCollectionView. When using the IEditableCollectionView, IEditableObject allows you to handle the transactional editing of your individial data objects using BeginEdit(), EndEdit(), and CancelEdit().
System.ComponentModel.ISupportInitialize
If you need your data object to perform an action after WPF has set each property from Xaml, this is the interface you need to implement. WPF will call EndInit() when all the properties have been set.
Which ones did I miss? Which interfaces do you think are important to keep in mind when creating data objects?