コード例 #1
0
ファイル: HomeViewModel.cs プロジェクト: Cricle/Anf
        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> >();
        }
コード例 #2
0
        // 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();
        }