Trying to use zoom and scroll MVVM way. ZoomInCommand and ZoomOutCommand get fired however modified MinZoomRange, RangeEnd, RangeStart but zoom is not working. Can you suggest any alternative ?
View Model
<charting:ChartArea Grid.Row="0" Grid.RowSpan="2" x:Name="chartArea" Legend="{Binding ElementName=legend}" EnableAnimations="False" SmartLabelsEnabled="True" Padding="5,10,20,10"> <charting:ChartArea.ZoomScrollSettingsX> <charting:ZoomScrollSettings ScrollMode="ScrollAndZoom" MinZoomRange="{Binding MinZoomRange, Mode=TwoWay}" RangeEnd ="{Binding RangeEnd, Mode=TwoWay}" RangeStart ="{Binding RangeStart, Mode=TwoWay}"/> </charting:ChartArea.ZoomScrollSettingsX> <charting:ChartArea.AxisY> <charting:AxisY AutoRange="True" /> </charting:ChartArea.AxisY> <charting:ChartArea.AxisX> <charting:AxisX DefaultLabelFormat="MM.dd
yyyy" StepLabelLevelCount="2" /> </charting:ChartArea.AxisX> </charting:ChartArea> <StackPanel HorizontalAlignment="Right" Orientation="Horizontal" Margin="0,10,15,5"> <telerik:RadButton Command="{Binding ZoomInCommand}" Margin="5,0" Width="20" Height="20" CornerRadius="16" BorderBrush="{StaticResource StrongBrush}"> <Path Stretch="Fill" Width="8" Height="8" HorizontalAlignment="Center" VerticalAlignment="Center" Stroke="{StaticResource StrongBrush}"/> </telerik:RadButton> <telerik:RadButton Command="{Binding ZoomOutCommand}" Margin="5,0" Width="20" Height="20" CornerRadius="16" BorderBrush="{StaticResource StrongBrush}"> <Path Stretch="Fill" Width="8" Height="8" HorizontalAlignment="Center" VerticalAlignment="Center" Stroke="{StaticResource StrongBrush}"/> </telerik:RadButton> </StackPanel>
View Model
#region zoom ICommand _zoomInCommand; public ICommand ZoomInCommand { get { if (_zoomInCommand == null) { _zoomInCommand = new DelegateCommand(ZoomIn, CanZoomIn); } return _zoomInCommand; } } ICommand _zoomOutCommand; public ICommand ZoomOutCommand { get { if (_zoomOutCommand == null) { _zoomOutCommand = new DelegateCommand(ZoomOut, CanZoomOut); } return _zoomOutCommand; } } private double _MaxZoomRange; public double MaxZoomRange { get { return _MaxZoomRange;} set { { _MaxZoomRange = value; OnPropertyChanged(()=>this.MaxZoomRange); } } } private double _Range; public double Range { get { return _Range;} set { { _Range = value; OnPropertyChanged(()=>this.Range); } } } private double _RangeEnd; public double RangeEnd { get { return _RangeEnd;} set { { _RangeEnd = value; OnPropertyChanged(()=>this.RangeEnd); } } } private double _RangeStart; public double RangeStart { get { return _RangeStart;} set { { _RangeStart = value; OnPropertyChanged(()=>this.RangeStart); } } } private double _MinZoomRange; public double MinZoomRange { get { return _MinZoomRange;} set { { _MinZoomRange = value; OnPropertyChanged(()=>this.MinZoomRange); } } } // // Summary: // Gets or sets the scroll mode. public ScrollMode ScrollMode { get; set; } // // Summary: // Gets or sets the slider selection end. public double SliderSelectionEnd { get; set; } // // Summary: // Gets or sets the slider selection start. public double SliderSelectionStart { get; set; } public void ZoomIn(object parameter) { double zoomCenter = RangeStart + (Range / 2); double newRange = Math.Max(MinZoomRange, Range) / 2; RangeStart = Math.Max(0, zoomCenter - (newRange / 2)); RangeEnd = Math.Min(1, zoomCenter + (newRange / 2)); ((DelegateCommand)_zoomInCommand).InvalidateCanExecute(); ((DelegateCommand)_zoomOutCommand).InvalidateCanExecute(); } public bool CanZoomIn(object parameter) { return Range > MinZoomRange; } public void ZoomOut(object parameter) { double zoomCenter = RangeStart + (Range / 2); double newRange = Math.Min(1, Range) * 2; if (zoomCenter + (newRange / 2) > 1) zoomCenter = 1 - (newRange / 2); else if (zoomCenter - (newRange / 2) < 0) zoomCenter = newRange / 2; RangeStart = Math.Max(0, zoomCenter - newRange / 2); RangeEnd = Math.Min(1, zoomCenter + newRange / 2); ((DelegateCommand)_zoomInCommand).InvalidateCanExecute(); ((DelegateCommand)_zoomOutCommand).InvalidateCanExecute(); } public bool CanZoomOut(object parameter) { return Range < 1d; } #endregionpublic ViewModel() { MinZoomRange = 0.005; Range = 1.0; RangeEnd = 1.0; RangeStart = 0.0; }