public TestViewModel()

in WindowsSmartInk/SmartInkLaboratory/ViewModels/TestViewModel.cs [170:237]


        public TestViewModel(ITrainingService training, IPredictionService prediction, IAppStateService state)
        {
            _training = training;
            _prediction = prediction;
            _state = state;

            Iterations.Sort(i => i.TrainedAt.Value, SortDirection.Descending);
            _state.KeysChanged += (s, e) =>
            {
                prediction.Initialize(_state.CurrentKeys.PredicationKey);
            };

            _state.PackageChanged += async  (s, e) =>
            {
                await GetIterationsAsync();
                IsLocalModelAvailable = (_state.CurrentPackage == null) ? false : _state.CurrentPackage.IsLocalModelAvailable;

                RaisePropertyChanged(nameof(IsReadyToTest));

                if (_state.CurrentPackage == null || !IsReadyToTest)
                    VisualStateChanged?.Invoke(this, new VisualStateEventArgs { NewState = "NoPackage" });
                else
                    VisualStateChanged?.Invoke(this, new VisualStateEventArgs { NewState = "HasPackage" });
            };

         
           
            this.UploadCorrection = new RelayCommand(() =>
            {
            },
            () =>
            {
                if (EvaluationResult == null || _state.CurrentTag == null)
                    return false;

                return _state.CurrentTag.Name != EvaluationResult;
            });

            this.DownloadModel = new RelayCommand(async() => {


                var downloadUri = await _training.GetModuleDownloadUriAsync(SelectedIteration.Id);
                if (downloadUri != null)
                {
                    var manager = new PackageManager();
                    manager.ModelDownloadStarted += (s, e) => {
                        VisualStateChanged?.Invoke(this, new VisualStateEventArgs { NewState = "DownloadStarted" });
                    };
                    manager.ModelDownloadCompleted += (s, e) => {
                        VisualStateChanged?.Invoke(this, new VisualStateEventArgs { NewState = "DownloadCompleted" });
                    };
                    manager.ModelDownloadError += (s, e) => {
                        VisualStateChanged?.Invoke(this, new VisualStateEventArgs { NewState = "DownloadError" });
                    };
                    manager.ModelDownloadProgress += (s, e) => {
                        DownloadProgress = e.Percentage;
                    };
                    var model = await manager.DownloadModelAsync(downloadUri);
                    await _state.CurrentPackage.SaveModelAsync(model);
                    IsLocalModelAvailable = _state.CurrentPackage.IsLocalModelAvailable;
                }
            },()=> { return SelectedIteration != null; });

            this.RefreshIterations = new RelayCommand(async () => {
                await GetIterationsAsync();
            });

        }