public CharacterPlanViewModel()
            : base("BackingFile", "SnapshotAsText")
        {
            var canSave = this.ObservableForProperty(x => x.IsDirty).Select(y => y.Value);

            Load = ReactiveCommand.CreateAsyncObservable(_ => LoadImpl());
            Save = ReactiveCommand.CreateAsyncObservable(canSave, _ => SaveImpl());

            SaveSnapshot = ReactiveCommand.CreateAsyncObservable(_ => SaveSnapshotImpl());

            AddArmor    = ReactiveCommand.CreateAsyncObservable(_ => AddArmorImpl());
            RemoveArmor = ReactiveCommand.CreateAsyncObservable(vm => RemoveArmorImpl((ArmorViewModel)vm));

            AddWeapon    = ReactiveCommand.CreateAsyncObservable(_ => AddWeaponImpl());
            RemoveWeapon = ReactiveCommand.CreateAsyncObservable(vm => RemoveWeaponImpl((WeaponViewModel)vm));

            ClassPlan = new ClassPlanViewModel();
            Monitor(ClassPlan);

            LevelPlans = new ReactiveList <LevelPlanViewModel>();
            Monitor(LevelPlans);

            Armor = new ReactiveList <ArmorViewModel>();
            Monitor(Armor);

            Weapons = new ReactiveList <WeaponViewModel>();
            Monitor(Weapons);

            var saveLoad = Observable.Merge(Load, Save);

            saveLoad.Subscribe(_ => MarkClean());

            Dirtied.Select(_ => GetMarkdownString()).ToProperty(this, x => x.SnapshotAsText, out _snapShotAsText);

            SetFromPlan(new CharacterPlan
            {
                ClassPlan = new ClassPlan()
            });
            MarkClean();
        }
Exemplo n.º 2
0
 public void OnDirtied()
 {
     Dirtied?.Invoke(this, EventArgs.Empty);
 }
Exemplo n.º 3
0
 private void MeterSignatures_FieldChanged(Duration delta) =>
 Dirtied?.Invoke(delta);
Exemplo n.º 4
0
 private void Melody_FieldChanged(Duration delta) =>
 Dirtied?.Invoke(delta);
Exemplo n.º 5
0
 private void Staffs_FieldChanged(Duration delta) =>
 Dirtied?.Invoke(delta);