public ProxyTestableViewModel() { TestProxy = AsyncCommand.Create((parameter, token) => { Url url = new Url(parameter as string ?? ""); TestResult = new SiteTestResultViewModel() { Model = new SiteProxyTestResult(HttpStatusCode.Gone, "", -1, SiteProxyTestStatus.Testing) }; return(SiteProxyTester.RunTest(m_model, url, token)); }); TestProxy.PropertyChanged += (s, e) => { if (e.PropertyName == "Execution") { if (m_testProxyExecution != null) { m_testProxyExecution.PropertyChanged -= TaskCompletionNotifierPropertyChangedHandler; } m_testProxyExecution = TestProxy.Execution; m_testProxyExecution.PropertyChanged += TaskCompletionNotifierPropertyChangedHandler; } }; GetLocation = AsyncCommand.Create((parameter, token) => { Location = "pending..."; return(IpGeolocation.GetLocation(m_model, token)); }); GetLocation.PropertyChanged += (s, e) => { if (e.PropertyName == "Execution") { if (m_getLocationExecution != null) { m_getLocationExecution.PropertyChanged -= GetLocationTaskCompletionNotifierPropertyChangedHandler; } } m_getLocationExecution = GetLocation.Execution; m_getLocationExecution.PropertyChanged += GetLocationTaskCompletionNotifierPropertyChangedHandler; }; }
private void TaskCompletionNotifierPropertyChangedHandler(object sender, PropertyChangedEventArgs args) { if (args.PropertyName == "IsCompleted") { if (TestProxy.Execution.IsCanceled) { TestResult = null; } else if (TestProxy.Execution.IsFaulted) { TestResult = new SiteTestResultViewModel() { Model = new SiteProxyTestResult(HttpStatusCode.Gone, $"ERROR({m_testProxyExecution.Exception.Message})", -1, SiteProxyTestStatus.Failed) }; } else if (TestProxy.Execution.IsSuccessfullyCompleted) { TestResult = new SiteTestResultViewModel() { Model = TestProxy.Execution.Result }; } } }