public virtual void Attach(FrameworkElement frameworkElement)
 {
     //we need to fix the datacontext for databinding to work
     if(frameworkElement != null)
     {
         frameworkElement.AddDataContextChangedHandler(this.DataContextChanged);
         if (frameworkElement.DataContext != null)
         {
             this.DataContextChanged(frameworkElement, EventArgs.Empty);
         }
     }
 }