| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | 
							- namespace Caliburn.Micro.Core {
 
-     using System;
 
-     using System.ComponentModel;
 
-     using System.Linq.Expressions;
 
-     using System.Runtime.Serialization;
 
-     /// <summary>
 
-     /// A base class that implements the infrastructure for property change notification and automatically performs UI thread marshalling.
 
-     /// </summary>
 
-     [DataContract]
 
-     public class PropertyChangedBase : INotifyPropertyChangedEx {
 
-         /// <summary>
 
-         /// Creates an instance of <see cref = "PropertyChangedBase" />.
 
-         /// </summary>
 
-         public PropertyChangedBase() {
 
-             IsNotifying = true;
 
-         }
 
-         /// <summary>
 
-         /// Occurs when a property value changes.
 
-         /// </summary>
 
-         public virtual event PropertyChangedEventHandler PropertyChanged;
 
-         /// <summary>
 
-         /// Enables/Disables property change notification.
 
-         /// Virtualized in order to help with document oriented view models.
 
-         /// </summary>
 
-         public virtual bool IsNotifying { get; set; }
 
-         /// <summary>
 
-         /// Raises a change notification indicating that all bindings should be refreshed.
 
-         /// </summary>
 
-         public virtual void Refresh() {
 
-             NotifyOfPropertyChange(string.Empty);
 
-         }
 
-         /// <summary>
 
-         /// Notifies subscribers of the property change.
 
-         /// </summary>
 
-         /// <param name = "propertyName">Name of the property.</param>
 
- #if NET || SILVERLIGHT
 
-         public virtual void NotifyOfPropertyChange(string propertyName) {
 
- #else
 
-         public virtual void NotifyOfPropertyChange([System.Runtime.CompilerServices.CallerMemberName] string propertyName = null) {
 
- #endif
 
-             if (IsNotifying && PropertyChanged != null) {
 
-                 Execute.OnUIThread(() => OnPropertyChanged(new PropertyChangedEventArgs(propertyName)));
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Notifies subscribers of the property change.
 
-         /// </summary>
 
-         /// <typeparam name = "TProperty">The type of the property.</typeparam>
 
-         /// <param name = "property">The property expression.</param>
 
-         public void NotifyOfPropertyChange<TProperty>(Expression<Func<TProperty>> property) {
 
-             NotifyOfPropertyChange(property.GetMemberInfo().Name);
 
-         }
 
-         /// <summary>
 
-         /// Raises the <see cref="PropertyChanged" /> event directly.
 
-         /// </summary>
 
-         /// <param name="e">The <see cref="PropertyChangedEventArgs"/> instance containing the event data.</param>
 
-         [EditorBrowsable(EditorBrowsableState.Never)]
 
-         protected void OnPropertyChanged(PropertyChangedEventArgs e) {
 
-             var handler = PropertyChanged;
 
-             if (handler != null) {
 
-                 handler(this, e);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Raises the property changed event immediately.
 
-         /// </summary>
 
-         /// <param name="propertyName">Name of the property.</param>
 
-         public virtual void RaisePropertyChangedEventImmediately(string propertyName)
 
-         {
 
-             if (IsNotifying)
 
-                 RaisePropertyChangedEventCore(propertyName);
 
-         }
 
-         void RaisePropertyChangedEventCore(string propertyName)
 
-         {
 
-             var handler = PropertyChanged;
 
-             if (handler != null)
 
-                 handler(this, new PropertyChangedEventArgs(propertyName));
 
-         }
 
-     }
 
- }
 
 
  |