Beispiel #1
0
        public PackageSelectorViewModel()
        {
            Packages       = new ObservableCollection <PackageDefinitionViewModel>();
            PackageSources = new ObservableCollection <Uri>();

            InitializePackageSources();

            PropertyChanged += (sender, args) =>
            {
                if (args.PropertyName == "SearchTerm")
                {
                    var searchTerm = SearchTerm.ToLowerInvariant();

                    if (searchTerm.Length < 3)
                    {
                        return;
                    }

                    SearchesInProgress++;

                    Task.Factory.StartNew(() =>
                    {
                        var repository = PackageRepositoryFactory.Default.CreateRepository(PackageSource.ToString());
                        return(repository.Search(searchTerm, true)
                               .Where(p => p.Id.ToLower().StartsWith(searchTerm))
                               .OrderBy(p => p.Id)
                               .ThenByDescending(p => p.Version)
                               .ToList()
                               .Select(p =>
                        {
                            var id = p.Id;
                            var version = p.Version.ToString();
                            return new PackageDefinitionViewModel(id, version);
                        })
                               .ToList());
                    }).ContinueWith(r =>
                    {
                        if (r.IsFaulted)
                        {
                            var exception = r.Exception.InnerExceptions.FirstOrDefault();
                            if (exception != null)
                            {
                                Status = exception.Message;
                            }
                            else
                            {
                                Status = "An unknown error occured accessing the Package Source.";
                            }
                        }
                        if (!r.IsFaulted && r.IsCompleted && searchTerm == SearchTerm.ToLowerInvariant())
                        {
                            Status = "";
                            Packages.Clear();
                            Packages.AddRange(r.Result);
                        }
                        SearchesInProgress--;
                    }, TaskScheduler.FromCurrentSynchronizationContext());
                }
            };
        }