public Task Navigate(Uri iUri, object iViewModel, JavascriptBindingMode iMode = JavascriptBindingMode.TwoWay) { if (iUri == null) { throw ExceptionHelper.GetArgument(string.Format("ViewModel not registered: {0}", iViewModel.GetType())); } _Navigating = true; INavigable oldvm = (Binding != null) ? Binding.Root as INavigable : null; if (_UseINavigable && (oldvm != null)) { oldvm.Navigation = null; } var wh = new WindowHelper(new HTMLLogicWindow()); if (_CurrentWebControl != null) { _CurrentWebControl.Crashed -= Crashed; } Task closetask = (_CurrentWebControl != null) ? _Window.CloseAsync() : TaskHelper.Ended(); _NextWebControl = _IWebViewLifeCycleManager.Create(); _NextWebControl.ConsoleMessage += ConsoleMessage; TaskCompletionSource <IAwesomeBinding> tcs = new TaskCompletionSource <IAwesomeBinding>(); UrlEventHandler sourceupdate = null; sourceupdate = (o, e) => { _NextWebControl.AddressChanged -= sourceupdate; _IAwesomiumBindingFactory.Bind(_NextWebControl, iViewModel, wh, iMode).WaitWith(closetask, t => Switch(t, wh.__window__, tcs)); }; _NextWebControl.AddressChanged += sourceupdate; if (_NextWebControl.Source == iUri) { _NextWebControl.Reload(false); } else { _NextWebControl.Source = iUri; } return(tcs.Task); }