private void UpdateQueryView(ICatpchaQueryView oldView, ICatpchaQueryView newView)
 {
     if (oldView != newView)
     {
         if (oldView != null)
         {
             oldView.PropertyChanged -= QueryViewOnPropertyChanged;
         }
         if (newView != null)
         {
             newView.PropertyChanged += QueryViewOnPropertyChanged;
         }
         if (oldView != newView)
         {
             PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CanLoad)));
         }
     }
 }
 private void UpdateCaptchaData()
 {
     var ov = queryView;
     try
     {
         if (ov != null && QueryParam != null)
         {
             if (oldCaptchaType == QueryParam.CaptchaType || StringComparer.CurrentCultureIgnoreCase.Equals(oldEngine, QueryParam.Engine))
             {
                 return;                                                
             }
         }
         CaptchaContainer.Children.Clear();
         if (QueryParam != null)
         {
             if (QueryParam.CaptchaType == CaptchaType.DvachCaptcha && CoreConstants.Engine.Makaba.Equals(QueryParam.Engine, StringComparison.OrdinalIgnoreCase))
             {
                 var qv = new DvachCaptchaQueryView();
                 queryView = qv;
                 CaptchaContainer.Children.Add(qv);
                 qv.CaptchaQueryResult += (sender, e) =>
                 {
                     CaptchaQueryResult?.Invoke(this, e);
                 };
                 UnknownCaptcha.Visibility = Visibility.Collapsed;
                 CaptchaContainer.Visibility = Visibility.Visible;
                 return;
             }
         }
         queryView = null;
         UnknownCaptcha.Visibility = Visibility.Visible;
         CaptchaContainer.Visibility = Visibility.Collapsed;
     }
     finally
     {
         oldCaptchaType = QueryParam?.CaptchaType;
         oldEngine = QueryParam?.Engine;
         UpdateQueryView(ov, queryView);
     }
 }