Catalog/WPFCatalog/ViewModelBase.cs

127 lines
3.9 KiB
C#
Raw Normal View History

2016-07-04 16:45:45 +02:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using System.Diagnostics;
namespace WPFCatalog
{
public abstract class ViewModelBase : GalaSoft.MvvmLight.ViewModelBase, INotifyPropertyChanged, IDisposable
{
#region Constructor
protected ViewModelBase()
{
}
#endregion // Constructor
#region DisplayName
/// <summary>
/// Returns the user-friendly name of this object.
/// Child classes can set this property to a new value,
/// or override it to determine the value on-demand.
/// </summary>
public virtual string DisplayName { get; protected set; }
#endregion // DisplayName
#region Debugging Aides
///// <summary>
///// Warns the developer if this object does not have
///// a public property with the specified name. This
///// method does not exist in a Release build.
///// </summary>
//[Conditional("DEBUG")]
//[DebuggerStepThrough]
//public void VerifyPropertyName(string propertyName)
//{
// // Verify that the property name matches a real,
// // public, instance property on this object.
// if (TypeDescriptor.GetProperties(this)[propertyName] == null)
// {
// string msg = "Invalid property name: " + propertyName;
// if (this.ThrowOnInvalidPropertyName)
// throw new Exception(msg);
// else
// Debug.Fail(msg);
// }
//}
/// <summary>
/// Returns whether an exception is thrown, or if a Debug.Fail() is used
/// when an invalid property name is passed to the VerifyPropertyName method.
/// The default value is false, but subclasses used by unit tests might
/// override this property's getter to return true.
/// </summary>
protected virtual bool ThrowOnInvalidPropertyName { get; private set; }
#endregion // Debugging Aides
#region INotifyPropertyChanged Members
/// <summary>
/// Raised when a property on this object has a new value.
/// </summary>
//public event PropertyChangedEventHandler PropertyChanged;
///// <summary>
///// Raises this object's PropertyChanged event.
///// </summary>
///// <param name="propertyName">The property that has a new value.</param>
//protected virtual void OnPropertyChanged(string propertyName)
//{
// this.VerifyPropertyName(propertyName);
// PropertyChangedEventHandler handler = this.PropertyChanged;
// if (handler != null)
// {
// var e = new PropertyChangedEventArgs(propertyName);
// handler(this, e);
// }
//}
#endregion // INotifyPropertyChanged Members
#region IDisposable Members
/// <summary>
/// Invoked when this object is being removed from the application
/// and will be subject to garbage collection.
/// </summary>
public void Dispose()
{
this.OnDispose();
}
/// <summary>
/// Child classes can override this method to perform
/// clean-up logic, such as removing event handlers.
/// </summary>
protected virtual void OnDispose()
{
}
#if DEBUG
/// <summary>
/// Useful for ensuring that ViewModel objects are properly garbage collected.
/// </summary>
~ViewModelBase()
{
string msg = string.Format("{0} ({1}) ({2}) Finalized", this.GetType().Name, this.DisplayName, this.GetHashCode());
System.Diagnostics.Debug.WriteLine(msg);
}
#endif
#endregion // IDisposable Members
}
}