protected virtual void ProcessLayoutChanging(LayoutChangedType type)
 {
     if (LayoutChanged == null)
     {
         return;
     }
     if (RaiseEventsImmediately)
     {
         LayoutChanged(this, new MyEventArgs {
             LayoutChangedTypes = new List <LayoutChangedType> {
                 type
             }
         });
     }
     else
     {
         if (!ChangesCache.Contains(type))
         {
             ChangesCache.Add(type);
         }
         if (IsLocked)
         {
             return;
         }
         IsLocked = true;
         Dispatcher.BeginInvoke(new Action(() => {
             IsLocked = false;
             LayoutChanged(this, new MyEventArgs {
                 LayoutChangedTypes = ChangesCache
             });
             ChangesCache.Clear();
         }));
     }
 }
 void ProcessLayoutChanging(LayoutChangedType type)
 {
     if (!LayoutChangedTypes.Contains(type))
     {
         LayoutChangedTypes.Add(type);
     }
     if (IsLocked)
     {
         return;
     }
     IsLocked = true;
     Dispatcher.BeginInvoke(new Action(() => {
         IsLocked = false;
         LayoutChanged(this, new MyEventArgs {
             LayoutChangedTypes = LayoutChangedTypes
         });
         LayoutChangedTypes.Clear();
     }));
 }