/// <summary> /// コンストラクタ /// </summary> public MainViewModel() { //設定ファイルの読み込み Settings = new Settings(); //セレクターのサイズの初期化 MouseSelectorPosition.GridSize = Settings.PalletCellSize; FontSize = 9; StageModel.Dir = new DirectoryInfo(Settings.StageDataDirectory); _model = new MainModel(Settings); MapChipPalletViewModel = new MapChipPalletViewModel(Settings); ObjectChipPalletViewModel = new ObjectChipPalletViewModel(Settings); MapChipPalletViewModel.PalletEnterEvent += chip => _model.CurrentPositionMapChip = chip.ID == 0 ? null : chip; ObjectChipPalletViewModel.PalletEnterEvent += chip => _model.CurrentPositionObjectChip = chip.ID == 0 ? null : chip; PalletViewModelManager = new PalletViewModelManager(MapChipPalletViewModel, ObjectChipPalletViewModel); StageViewModels = ViewModelHelper.CreateReadOnlyDispatcherCollection( _model.StageModels, m => { var vm = new StageViewModel(m, this); vm.PropertyChanged += (sender, args) => RaiseModelPropertyChanged(args.PropertyName); return vm; }, DispatcherHelper.UIDispatcher); //TreeViewの要素リストを監視 MapViewModels = ViewModelHelper.CreateReadOnlyDispatcherCollection( _model.MapModels, model => { var vm = new MapViewModel(model); vm.PropertyChanged += (sender, args) => RaiseModelPropertyChanged(args.PropertyName); return vm; }, DispatcherHelper.UIDispatcher); //MainModelのプロパティ変更を監視 Listener = new PropertyChangedEventListener(_model); Listener.RegisterHandler((sender, args) => RaisePropertyChanged(args.PropertyName)); Listener.RegisterHandler("CurrentMap", (sender, args) => CurrentMapChenged()); Listener.RegisterHandler("Scale", (sender, args) => { RaisePropertyChanged("MapWidth"); RaisePropertyChanged("MapHeight"); }); Listener.RegisterHandler("CurrentPosition", (sender, args) => _model.UpdateMousePositionProperty()); CompositeDisposable.Add(Listener); ChangeMapInitialize(); }
public void CloseStage(StageViewModel parameter) { if (_model.IsEdited()) { var result = MessageBox.Show("Stageの変更を保存しますか?", "StageMapEditor", MessageBoxButton.YesNoCancel); switch (result) { case MessageBoxResult.OK: case MessageBoxResult.Yes: _model.Save(); break; case MessageBoxResult.Cancel: case MessageBoxResult.None: return; case MessageBoxResult.No: break; default: throw new ArgumentOutOfRangeException(); } } _model.Parent.StageModels.Remove(_model); }
/// <summary> /// タブの変更イベント /// </summary> /// <param name="stageVm"></param> public void ChangeTab(StageViewModel stageVm) { CurrentStage = stageVm == null || StageModels.Count == 0 ? null : StageModels.FirstOrDefault(stageVm.HasModel); }