public ZoomHistoryMvvmViewModel() { _rangeHistoryCompare = new RangeHistorySameCompare(); var vm1 = new LineRenderableSeriesViewModel { DataSeries = FillData(new XyDataSeries <double, double>(), "firstDataSeries"), XAxisId = _xAxisKey.Id, YAxisId = _y0AxisKey.Id, StrokeThickness = 2, Stroke = Color.FromArgb(0xff, 0x64, 0x95, 0xed), }; var vm2 = new LineRenderableSeriesViewModel { DataSeries = FillData(new XyDataSeries <double, double>(), "secondDataSeries"), XAxisId = _xAxisKey.Id, YAxisId = _y1AxisKey.Id, StrokeThickness = 2, Stroke = Color.FromArgb(0xff, 0xff, 0x45, 0x00), }; RenderableSeriesViewModels = new List <IRenderableSeriesViewModel> { vm1, vm2 }; _zoomHistoryManager = new ZoomHistoryManager(); _zoomHistoryManager.RangeHistoryChanged += OnRangeHistoryChanged; _undoCommand = new ActionCommand(() => { if (_zoomHistoryManager.CanUndo()) { _zoomHistoryManager.Undo(); var index = RangesHistory.IndexOf(_selectedRange, _rangeHistoryCompare); _selectedRange = RangesHistory[index - 1]; OnPropertyChanged("SelectedRange"); RaiseUndoRedoCanExecute(); } }, () => _zoomHistoryManager.CanUndo()); _redoCommand = new ActionCommand(() => { if (_zoomHistoryManager.CanRedo()) { _zoomHistoryManager.Redo(); var index = RangesHistory.IndexOf(_selectedRange, _rangeHistoryCompare); _selectedRange = RangesHistory[index + 1]; OnPropertyChanged("SelectedRange"); RaiseUndoRedoCanExecute(); } }, () => _zoomHistoryManager.CanRedo()); }
private void OnRangeHistoryChanged(object sender, HistoryChangedEventArgs args) { if (args.OldRanges != null) { for (int i = 0; i < args.DisposedAmount; i++) { RangesHistory.RemoveAt(RangesHistory.Count - 1); } } if (args.NewRanges != null && args.NewRanges.Count > 0) { var newRanges = args.NewRanges; if (newRanges.Count < AxisAmount) { newRanges = FillRanges(newRanges); } var item = new ChartRangeHistory(newRanges) { ItemId = Guid.NewGuid().ToString() }; RangesHistory.Add(item); while (RangesHistory.Count > ZoomHistoryManager.HistoryDepth) { RangesHistory.RemoveAt(0); } OnPropertyChanged("RangesHistory"); _selectedRange = item; OnPropertyChanged("SelectedRange"); } RaiseUndoRedoCanExecute(); }