private void StartDrag(ListBoxItem listBoxItem, MouseEventArgs e) { isDragging = true; try { if (listBoxItem != null) { // Find the data behind the ListBoxItem ICharacterOption option = (ICharacterOption)listBoxItem.DataContext; int sourceIndex = optionListBox.Items.IndexOf(option); // Initialize the drag & drop operation DataObject dragData = new DataObject(Constants.OPTION_DRAG_KEY, new Tuple <IOptionGroupViewModel, int, ICharacterOption>(this.viewModel, sourceIndex, option)); DragDrop.DoDragDrop(listBoxItem, dragData, DragDropEffects.Move); } } catch (Exception ex) { } finally { isDragging = false; dataItem = null; } }
private void RemoveOption(ICharacterOption option) { T optionToRemove = (T)option; if (optionGroup.Contains(optionToRemove)) { optionGroup.Remove(optionToRemove); } }
public static object GetCurrentSelectedOptionInOptionGroup(Object lb) { ICharacterOption option = null; ListBox listBox = lb as ListBox; if (listBox != null && listBox.SelectedItem != null) { if (listBox.SelectedItem is ICharacterOption) { option = listBox.SelectedItem as ICharacterOption; } } return(option); }
public void InsertOption(int index, ICharacterOption characterOption) { OptionGroup <T> group = (optionGroup as OptionGroup <T>); var existingIndex = group.IndexOf((T)characterOption); if (existingIndex >= 0) { group.RemoveAt(existingIndex); if (index > 0 && index >= group.Count) { index -= 1; } } group.Insert(index, (T)characterOption); }
private void GroupBox_PreviewDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(Constants.OPTION_DRAG_KEY)) { expanderExpandedForDrop = false; GroupBox groupBox = (GroupBox)sender; Tuple <IOptionGroupViewModel, int, ICharacterOption> dragDropDataTuple = e.Data.GetData(Constants.OPTION_DRAG_KEY) as Tuple <IOptionGroupViewModel, int, ICharacterOption>; if (dragDropDataTuple != null) { IOptionGroupViewModel sourceViewModel = dragDropDataTuple.Item1; int sourceIndex = dragDropDataTuple.Item2; ICharacterOption option = dragDropDataTuple.Item3; if (this.viewModel.OptionGroup.Type == OptionType.Mixed && sourceViewModel.OptionGroup.Type != OptionType.Mixed) // do a copy paste { sourceIndex = -1; } int targetIndex = 0; ListBoxItem listBoxItem; FindDropTarget(groupBox, out listBoxItem, e); if (listBoxItem != null) { ICharacterOption target = listBoxItem.DataContext as ICharacterOption; if (dragDropDataTuple != null && target != null) { targetIndex = optionListBox.Items.IndexOf(target); } } else { targetIndex = optionListBox.Items != null ? optionListBox.Items.Count : 0; // append to last of current option group if (sourceIndex >= 0 && this.viewModel == sourceViewModel) // an item will be removed from the current option group, so reduce target index by 1 { targetIndex -= 1; } } if (sourceViewModel != null && sourceIndex >= 0) { sourceViewModel.RemoveOption(sourceIndex); } this.viewModel.InsertOption(targetIndex, option); this.viewModel.SaveOptionGroup(); } } }