コード例 #1
0
 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();
 }
コード例 #2
0
 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;
 }
コード例 #3
0
        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
            });
        }