public DirectoryListViewModel( IDirectoryDataService directorySetupService, IInjectionProviderService injectionProviderService, CreateDirectorySetupCommand createDirectorySetup, FullSyncCommand fullSync, GenerateItemsFromFilesCommand generateItems) { this._directorySetupService = directorySetupService; this._injectionProviderService = injectionProviderService; this.CreateDirectorySetup = createDirectorySetup; FullSync = fullSync; GenerateItems = generateItems; this._injectionProviderService .Provider .Select(provider => this._directorySetupService .Get() .Connect() .Sort(dir => (string)dir.Name) .Transform(item => { var vm = provider.GetRequiredService <DirectorySetupCardViewModel>(); vm.DirectorySetupChanges.OnNext(item); return(vm); }) ) .Switch() .TakeUntil(destroy) .DisposeMany() .ObserveOn(RxApp.MainThreadScheduler) .Bind(out _directories) .Subscribe(); }
public StartupViewModel( ISettingsService settingsService, ISaveService saveService, OpenFileDialogCommand openExistingLibraryCommand, LibraryInfoService libraryInfoService, LibraryViewModel libraryViewModel, SaveFileLoadingViewModel loadingScreen, IInjectionProviderService injectionProvider, AppWindow window) { this.MostRecentLibraries = settingsService.MostRecentLibraries; this.OpenNewLibraryCommand = new RelayCommand(_ => openNewLibrary()); this.OpenListedLibraryCommand = new RelayCommand(path => openExistingLibrary(path as string)); this.settingsService = settingsService; this.saveService = saveService; this.OpenExistingLibraryCommand = openExistingLibraryCommand; this.OpenExistingLibraryAction = openExistingLibrary; this.LibraryInfoService = libraryInfoService; this.libraryViewModel = libraryViewModel; this.loadingScreen = loadingScreen; this.injectionProvider = injectionProvider; this.window = window; }
public ItemListViewModel( IItemService itemService, IInjectionProviderService injectionProviderService) { this._itemService = itemService ?? throw new NullReferenceException("got no itemService"); this._injectionProviderService = injectionProviderService ?? throw new NullReferenceException("got no itemservice"); this.DeselectAllCommand = new RelayCommand( _ => this.SelectedItemIDs.Clear(), _ => this.SelectedItemIDs.Items.Any()); this.ItemClickedCommand = new RelayCommand(onItemClicked); this.ListKeyUpCommand = new RelayCommand(onListKeyUp); DragCommand = new RelayCommand(sender => { if (KeyboardHelper.IsKeyPressed(ModifierKeys.Alt)) { itemDrag(sender as DependencyObject); } }); this._injectionProviderService.Provider.Subscribe( (provider) => { if (provider == null) { throw new InvalidOperationException("provider is null"); } #region list assembly var itemList = this._itemService .GetExtended() .Connect() .Filter(FilterChanges) .TakeUntil(destroy); var selectionList = itemList.Transform(item => new ItemSelectionInfo(item, this, DragCommand)) .DisposeMany(); var _selection = SelectedItemIDs.Connect() .AddKey(id => id) .LeftJoin( itemList, item => item.ItemId, (id, item) => new { id, item }) .RemoveKey(); Selection = _selection .Filter(x => x.item.HasValue) .Transform(x => x.item.Value) .AsObservableList(); _selection .Filter(x => !x.item.HasValue) .ToCollection() .Subscribe(col => { if (col.Any()) { SelectedItemIDs.RemoveMany(col.Select(x => x.id)); } }); selectionList .Sort(item => item.Item.Name) .ObserveOn(RxApp.MainThreadScheduler) .Do(_ => this.Disconnected = true) .Bind(out _items) .Do(_ => this.Disconnected = false) .Subscribe(); #endregion }); }