private void HoldCompleted(object sender, ManipulationCompletedEventArgs e) { if (!IsActive) { return; } // stop the timer so that we don't try to re-fix this thing after moving to our // final destination. _dispatcherTimer.Stop(); var dragIndex = _currentIndex; var targetItem = _pointIndex.Get(_currentIndex); var targetLocation = targetItem.Position.Top - _scrollViewer.VerticalOffset; var transform = _dragImage.GetVerticalOffset().Transform; transform.Animate(null, targetLocation, CompositeTransform.TranslateYProperty, 200, 0, completed: () => { // reshow the hidden item if (_cardView != null) { _cardView.Opacity = 1.0; } // fade out the dragged image if (_dragImage != null) { _dragImage.Animate(null, 0.0, UIElement.OpacityProperty, 700, 0, completed: () => { _dragImage.Visibility = Visibility.Collapsed; }); } Complete(); if (dragIndex == _initialIndex) { return; } // move the dragged item if (_cardView == null) { return; } var item = (CardViewModel)_cardView.DataContext; _cardsModel.Remove(item); _cardsModel.Insert(dragIndex, item); _cardsModel.Refresh(); // fire off the event for subscribers _eventAggregator.Publish(CardPriorityChanged.Create(item.Id, dragIndex, _cardsModel.ToList())); }); IsActive = false; }
public void Handle(CardPriorityChanged message) { switch (message.Type) { case PositionType.Top: Handle(api => api.Cards.ChangePos(new CardId(message.CardId), Position.Top)); break; case PositionType.Bottom: Handle(api => api.Cards.ChangePos(new CardId(message.CardId), Position.Bottom)); break; case PositionType.Exact: Handle(api => api.Cards.ChangePos(new CardId(message.CardId), message.Pos)); break; } }