//public InteractionRequest<Notification> AddRequest { get; } = new InteractionRequest<Notification>(); //public InteractionRequest<Notification> EditRequest { get; } = new InteractionRequest<Notification>(); public MetadataImportSettingDialogViewModel(IDirectoryNameParserManager directoryNameParserManager) { DirectoryNameParserManager = directoryNameParserManager; DirectoryNameParsers = DirectoryNameParserManager .Items .ToReadOnlyReactiveCollection(x => new DirectoryNameParserViewModel(DirectoryNameParserManager, x)); UpCommand = SelectedParser .Select(x => x != null && DirectoryNameParserManager.Items.Count >= 2 && GetIndex(x.Model) > 0) .ToReactiveCommand(); UpCommand .Subscribe(() => Up()); DownCommand = SelectedParser .Select(x => x != null && DirectoryNameParserManager.Items.Count >= 2 && GetIndex(x.Model) < DirectoryNameParserManager.Items.Count - 1) .ToReactiveCommand(); DownCommand .Subscribe(() => Down()); AddCommand .Select(_ => new DirectoryNameParser()) .Subscribe(x => throw new NotImplementedException() //AddRequest.Raise(new Notification //{ // Title = Resources.EditMetadataImportSettingDialogTitle_Add, // Content = x //}) ); EditCommand = SelectedParser .Select(x => x != null) .ToReactiveCommand(); EditCommand .Select(_ => SelectedParser.Value.Model) .Subscribe(x => throw new NotImplementedException() //EditRequest.Raise(new Notification //{ // Title = Resources.EditMetadataImportSettingDialogTitle_Edit, // Content = x //}) ); RemoveCommand = SelectedParser .Select(x => x != null) .ToReactiveCommand(); RemoveCommand .Subscribe(() => Remove()); CloseCommand .Subscribe(dialog => { DirectoryNameParserManager.Save(); dialog.DialogResult = true; }); }
public DirectoryNameParserViewModel(IDirectoryNameParserManager DirectoryNameParserManager, DirectoryNameParser model) { Model = model; Priority = Model .ObserveProperty(x => x.Priority) .ToReactiveProperty() .AddTo(Disposable); Pattern = Model .ObserveProperty(x => x.Pattern) .ToReactiveProperty() .AddTo(Disposable); CommitAsObservable .Select(_ => Pattern.Value) .Subscribe(x => { Model.Pattern = x; if (DirectoryNameParserManager.Items.Where(i => i.Pattern.Equals(Model.Pattern)).Count() == 0) { Model.Priority = DirectoryNameParserManager.Items.Count; DirectoryNameParserManager.Items.Add(Model); } }) .AddTo(Disposable); }