/// <summary> /// Creates an exact copy of this card but for two differences. /// It has a newly generated Guid and can be assigned to a new owning set. /// This clone is effectively a whole new card with the same template /// and element values as the source it was cloned from. There are no links /// shared between this card the new clone. /// </summary> /// <param name="owningSet"></param> /// <returns></returns> public ICardViewItem CloneCard(ICardSetModel owningSet) { ICardViewItem card = new CardViewItem(this.Template); owningSet.RegisterCard(card); return(card); }
private void CardDropAction(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(ITreeViewItem).Name)) { TreeViewItem targetItem = sender as TreeViewItem; ITreeViewItem target = targetItem.DataContext as ITreeViewItem; ITreeViewItem card = e.Data.GetData(typeof(ITreeViewItem).Name) as ITreeViewItem; //did we drop onto a card or a deck ICardModel dropTarget = target as ICardModel; ICardSetViewItem setModel = TreeHelper.InferSet(targetItem); if (setModel != null && card != null) { ICardSetModel set = setModel as ICardSetModel; if (setModel == card.Parent) { //moving within the same set //did we drop on a deck or a card if (dropTarget != null) { if (dropTarget != card as ICardModel) { set.SwitchCardOrder(card as ICardModel, dropTarget, true); } } } else { //moving to a new set - first, move to the set ICardSetModel owner = card.Parent as ICardSetModel; owner.UnregisterCard(card as ICardModel); owner = set as ICardSetModel; owner.RegisterCard(card as ICardModel); //did we drop on a deck or a card - move card within the set if (dropTarget != null) { if (dropTarget != card as ICardModel) { set.SwitchCardOrder(card as ICardModel, dropTarget, true); } } } NotifyPropertyChanged("ObservableSets"); } else { MessageBox.Show("There was an error attempting to determine the card or deck during the drag operation.\n " + "Hell! I don't even know if it was a card or a deck!"); return; } } }