private void _carouselView_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == nameof(_carouselView.Position) && !_supressCarouselViewPositionChangedEvent) { var positionChangingArgs = new PositionChangingEventArgs() { Canceled = false, NewPosition = _carouselView.Position, OldPosition = SelectedTabIndex }; OnPositionChanging(ref positionChangingArgs); if (positionChangingArgs != null && positionChangingArgs.Canceled) { _supressCarouselViewPositionChangedEvent = true; _carouselView.PositionSelected -= _carouselView_PositionSelected; _carouselView.PropertyChanged -= _carouselView_PropertyChanged; _carouselView.Position = SelectedTabIndex; _carouselView.PositionSelected += _carouselView_PositionSelected; _carouselView.PropertyChanged += _carouselView_PropertyChanged; _supressCarouselViewPositionChangedEvent = false; } SetPosition(positionChangingArgs.NewPosition); } }
public void SetPosition(int position) { int oldPosition = _position; var positionChangingArgs = new PositionChangingEventArgs() { Canceled = false, NewPosition = position, OldPosition = oldPosition }; OnPositionChanging(ref positionChangingArgs); if (positionChangingArgs != null && positionChangingArgs.Canceled) { return; } if (position >= 0 && position < ItemSource.Count) { for (int i = 0; i < ItemSource.Count; i++) { ItemSource[i].IsCurrent = i == position; } _carouselView.PositionSelected -= _carouselView_PositionSelected; _carouselView.Position = position; _carouselView.PositionSelected += _carouselView_PositionSelected; _position = position; } var positionChangedArgs = new PositionChangedEventArgs() { NewPosition = _position, OldPosition = oldPosition }; OnPositionChanged(positionChangedArgs); }
protected virtual void OnPositionChanging(ref PositionChangingEventArgs e) { PositionChangingEventHandler handler = PositionChanging; handler?.Invoke(this, e); }