public AppLaunchActionViewModel(ActionsEditViewModel editVM, FolderReactionModel reactionModel, AppLaunchReactiveAction appAction) : base(reactionModel) { EditVM = editVM; Action = appAction; AppPolicy = appAction.AppPolicy; if (AppPolicy != null) { AppName = AppPolicy.AppName; AppGuid = AppPolicy.Guid; UsingOptions = Action.Options.ToReadOnlyReactiveCollection(x => new AppOptionInstanceViewModel(Action, x) ); Action.Options.ObserveElementPropertyChanged() .Subscribe(x => Action.Validate()); } else { AppName = "<App not found>"; } }
// Reactionmodelを受け取ってVMを生成する public ReactionViewModel(FolderReactionModel reaction, PageManager pageManager, IAppPolicyManager appPolicyManager) { _CompositeDisposable = new CompositeDisposable(); Reaction = reaction; PageManager = pageManager; _AppPolicyManager = appPolicyManager; IsReactionValid = Reaction.ObserveProperty(x => x.IsValid) .ToReactiveProperty() .AddTo(_CompositeDisposable); ReactionWorkName = Reaction.ToReactivePropertyAsSynchronized(x => x.Name) .AddTo(_CompositeDisposable); WorkFolderEditVM = new WorkFolderEditViewModel(PageManager, Reaction); FilterEditVM = new FilterEditViewModel(PageManager, Reaction); ActionsEditVM = new ActionsEditViewModel(Reaction, PageManager, _AppPolicyManager); DestinationEditVM = new DestinationEditViewModel(PageManager, Reaction); EditVMList = new List<ReactionEditViewModelBase>() { WorkFolderEditVM, FilterEditVM, ActionsEditVM, DestinationEditVM }; IsEnable = Reaction.ToReactivePropertyAsSynchronized(x => x.IsEnable) .AddTo(_CompositeDisposable); // see@ http://stackoverflow.com/questions/1833830/timespan-parse-time-format-hhmmss // https://msdn.microsoft.com/en-us/library/ee372286.aspx MonitorIntervalSeconds = Reaction.ToReactivePropertyAsSynchronized( x => x.CheckInterval , convert: (timespan) => ((int)timespan.TotalSeconds).ToString() , convertBack: (seconds) => TimeSpan.FromSeconds(int.Parse(seconds)) , ignoreValidationErrorValue: true ) .AddTo(_CompositeDisposable); MonitorIntervalSeconds.SetValidateNotifyError(text => { int temp; if (false == int.TryParse(text, out temp)) { return "Number Only"; } return null; }); }