public HomeViewModel() { ComicEngine = AppEngine.GetRequiredService <ComicEngine>(); SearchEngine = AppEngine.GetRequiredService <SearchEngine>(); ProposalEngine = AppEngine.GetRequiredService <ProposalEngine>(); SearchCommand = new AsyncRelayCommand(SearchAsync); GoSourceCommand = new RelayCommand(GoSource); SetAndSearchCommand = new AsyncRelayCommand <string>(SetAndSearchAsync); ResetCommand = new RelayCommand(Reset); SetCurrentCommand = new RelayCommand <ComicSnapshotInfo <TSourceInfo> >(SetCurrent); CopyCommand = new RelayCommand <string>(Copy); scope = AppEngine.CreateScope(); observableCollectionFactory = AppEngine.GetRequiredService <IObservableCollectionFactory>(); SearchProviders = observableCollectionFactory.Create <ISearchProvider>(); foreach (var item in SearchEngine) { var sp = (ISearchProvider)scope.ServiceProvider.GetRequiredService(item); SearchProviders.Add(sp); } CurrentSearchProvider = SearchProviders.FirstOrDefault(); Snapshots = observableCollectionFactory.Create <ComicSnapshotInfo <TSourceInfo> >(); ProposalSnapshots = observableCollectionFactory.Create <ComicSnapshotInfo <TSourceInfo> >(); EngineIcons = observableCollectionFactory.Create <EngineInfo <TImage> >(); }
// Raised when a search provider is added or removed private void SearchProviders_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.NewItems != null) { object input = null; // Get existing input so new providers' inputs can be synced if (SearchProviders.Count > e.NewItems.Count) { ISearchProvider preExistingProvider = SearchProviders.FirstOrDefault(p => !e.NewItems.Contains(p)); if (preExistingProvider != null) { input = preExistingProvider.Input; } } foreach (ISearchProvider provider in e.NewItems) { // Listen for property changes on any new search providers provider.PropertyChanged += SearchProvider_PropertyChanged; // Initialize input provider.Input = input; } } if (e.OldItems != null) { // Unhook from property changes on any removed search providers foreach (ISearchProvider provider in e.OldItems) { provider.PropertyChanged -= SearchProvider_PropertyChanged; } } raiseCanExecuteChanged(); }