public PresetFolderViewModel(PresetsService presetsService, bool isExpanded, bool isBuiltIn, long id = 0)
        {
            this.presetsService = presetsService;
            this.isExpanded     = isExpanded;
            this.IsBuiltIn      = isBuiltIn;
            this.Id             = id;

            this.AllItems
            .Connect()
            .Bind(this.AllItemsBindable)
            .Subscribe();

            this.WhenAnyValue(x => x.IsExpanded)
            .Skip(1)
            .Subscribe(isExp =>
            {
                this.presetsService.SaveFolderIsExpanded(this);
            });

            this.WhenAnyValue(x => x.IsExpanded)
            .Subscribe(isExp =>
            {
                this.ReselectPresetOnExpanded(this);
            });
        }
        public PresetFolderViewModel(PresetsService presetsService, bool isExpanded)
        {
            this.presetsService = presetsService;
            this.isExpanded     = isExpanded;

            IObservable <bool> canRemove = this.WhenAnyValue(x => x.SubFolders.Count, x => x.Items.Count, (numSubfolders, numItems) =>
            {
                return(numSubfolders == 0 && numItems == 0 && this.Id != 0);
            });

            this.CreateSubfolder = ReactiveCommand.Create();
            this.CreateSubfolder.Subscribe(_ => this.CreateSubfolderImpl());

            this.RenameFolder = ReactiveCommand.Create();
            this.RenameFolder.Subscribe(_ => this.RenameFolderImpl());

            this.RemoveFolder = ReactiveCommand.Create(canRemove);
            this.RemoveFolder.Subscribe(_ => this.RemoveFolderImpl());

            this.WhenAnyValue(x => x.IsExpanded)
            .Skip(1)
            .Subscribe(isExp =>
            {
                this.presetsService.SaveFolderIsExpanded(this);
            });

            this.WhenAnyValue(x => x.IsExpanded)
            .Subscribe(isExp =>
            {
                this.ReselectPresetOnExpanded(this);
            });
        }
 public static PresetFolderViewModel FromPresetFolder(PresetFolder folder, PresetsService passedPresetsService)
 {
     return(new PresetFolderViewModel(passedPresetsService, folder.IsExpanded, isBuiltIn: false, id: folder.Id)
     {
         Name = folder.Name,
         ParentId = folder.ParentId
     });
 }