/// <summary>
 /// Unsubscribes the given object from changes in the selected objects.
 /// </summary>
 /// <param name="propertyViewerObserver">The object to observe selected objects changes.</param>
 public void Unsubscribe(IPropertyViewerObserver propertyViewerObserver)
 {
     lock (this.ObserverLock)
     {
         if (this.PropertyViewerObservers.Contains(propertyViewerObserver))
         {
             this.PropertyViewerObservers.Remove(propertyViewerObserver);
         }
     }
 }
 /// <summary>
 /// Subscribes the given object to changes in the selected objects.
 /// </summary>
 /// <param name="propertyViewerObserver">The object to observe selected objects changes.</param>
 public void Subscribe(IPropertyViewerObserver propertyViewerObserver)
 {
     lock (this.ObserverLock)
     {
         if (!this.PropertyViewerObservers.Contains(propertyViewerObserver))
         {
             this.PropertyViewerObservers.Add(propertyViewerObserver);
             propertyViewerObserver.Update(this.TargetObjects);
         }
     }
 }