|
using System.ComponentModel;
namespace HappyNomad.PresentationModel {
/// <summary>Presentation-tailored representation of a domain-model type.</summary>
/// <typeparam name="DMType">The domain-model type to be wrapped</typeparam>
/// <author>Adrian Alexander</author>
public abstract class ItemPresentationModel<DMType> : INotifyPropertyChanged where DMType : class {
#region 'DomainItem' Property
private DMType domainItem;
public DMType DomainItem {
get { return domainItem; }
set { domainItem = value; }
}
protected ItemPresentationModel( DMType domainItem ) {
this.domainItem = domainItem;
}
#endregion
#region 'IsSelected' Property
private bool isSelected;
/// <summary>
/// Is the TreeViewItem associated with this object selected?
/// [Source: http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx ]
/// </summary>
public bool IsSelected {
get { return isSelected; }
set {
if ( value != isSelected ) {
isSelected = value;
this.OnPropertyChanged( "IsSelected" );
}
}
}
#endregion // IsSelected
#region 'INotifyPropertyChanged' Members
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged( string propertyName ) {
if ( this.PropertyChanged != null )
this.PropertyChanged( this, new PropertyChangedEventArgs( propertyName ) );
}
#endregion // INotifyPropertyChanged Members
#region 'Object.Equals' Method
public override bool Equals( object obj ) {
DMType compareTo = obj as DMType;
if ( compareTo == null ) {
ItemPresentationModel<DMType> itemWrapper = obj as ItemPresentationModel<DMType>;
if ( itemWrapper == null ) return false;
else compareTo = itemWrapper.domainItem;
}
return domainItem.Equals( compareTo );
}
public override int GetHashCode() {
return domainItem.GetHashCode();
}
#endregion //Object.Equals Method
public override string ToString() {
return GetType().Name + ": DomainItem={" + domainItem + "}";
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Adrian loves facilitating suave user experiences via the latest and greatest GUI technologies such as Windows 8 Metro-style apps as well as WPF. More generally, he finds joy in architecting software that is easy to comprehend and maintain. He does so by applying design patterns at the top-level, and by incessantly refactoring code at lower levels. He's always interested in hearing about opportunities for full or part-time development work. He resides in Pennsylvania but can potentially travel anywhere in the country. (Writing about himself in the third-person is Adrian's new hobby.)