1. I see that you are binding the PanOffset and Zoom to your view models. Is there a reason to do this? If not, I suggest you remove these bindings. If you think you need them, please share with us your reasons, perhaps you can use the HorozontalZoomRangeStart and End properties instead, or we can make some other suggestion.
2. You are trying to change the Zoom during the PanOffsetChanged event. The Zoom and PanOffset are tightly coupled and I think that it is a bad idea to change the zoom while the zoom is changing. Problems, like layout cycles, may occur.
3. You mention that you are trying to make a selection, is that right? So you do not want to make a drag-to-zoom operation at all, correct? Well, I suggest you completely disable the panzoom behavior (may be even remove it). Then you can draw a rectangle to denote what the user is about to select. We have a demo showing similar functionality here
4. So, what you are trying to get from the axis.ActualVisibleRange.Minimum and Maximum is where the user dragged. You only need to get these values, and not zoom, but what you are doing is that the chart recalculates everything and lays out its visuals to zoom in, and then
recalculates everything and lays out its visuals to zoom out. You see, you are making the chart work really hard, this leads to performance loss in your application.
I hope you understand that your current approach has some flaws.
It is much easier to draw your own drag-to-select rect. You can get the start and end values by using the conversion api of the chart -
I have attached a modified version of the drag-to-select sdk sample that, I think, demonstrates one way to get the behavior you require. Do check it out and see if you can adopt the approach into your actual application, and make the necessary modifications to it.
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.