public void ReOrderOptionGroups(int sourceIndex, int targetIndex) { IOptionGroupViewModel sourceViewModel = this.OptionGroups[sourceIndex]; this.OptionGroups.RemoveAt(sourceIndex); this.EditedCharacter.RemoveOptionGroupAt(sourceIndex); this.OptionGroups.Insert(targetIndex, sourceViewModel); this.EditedCharacter.InsertOptionGroup(targetIndex, sourceViewModel.OptionGroup); this.eventAggregator.GetEvent <SaveCrowdEvent>().Publish(null); }
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(); } } }
public OptionGroupView() { InitializeComponent(); this.DataContextChanged += (sender, e) => { this.viewModel = this.DataContext as IOptionGroupViewModel; this.viewModel.EditModeEnter += viewModel_EditModeEnter; this.viewModel.EditModeLeave += viewModel_EditModeLeave; }; Style itemContainerStyle = this.optionListBox.ItemContainerStyle; if (itemContainerStyle != null && itemContainerStyle.Setters != null) { itemContainerStyle.Setters.Add(new Setter(ListBoxItem.AllowDropProperty, true)); itemContainerStyle.Setters.Add(new EventSetter(ListBoxItem.PreviewMouseLeftButtonDownEvent, new MouseButtonEventHandler(ListBoxItem_PreviewMouseLeftButtonDown))); itemContainerStyle.Setters.Add(new EventSetter(ListBoxItem.PreviewMouseLeftButtonUpEvent, new MouseButtonEventHandler(ListBoxItem_PreviewMouseLeftButtonUp))); } }
private void ListView_PreviewDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(Constants.OPTION_GROUP_DRAG_KEY)) { string draggingOPtionGroupName = e.Data.GetData(Constants.OPTION_GROUP_DRAG_KEY) as string; ListViewItem listViewItem; FindDropTarget(sender as ListView, out listViewItem, e); if (listViewItem != null) { IOptionGroupViewModel targetViewModel = listViewItem.DataContext as IOptionGroupViewModel; if (targetViewModel.OptionGroup.Name != draggingOPtionGroupName) { var sourceViewModel = this.viewModel.OptionGroups.FirstOrDefault(vm => vm.OptionGroup.Name == draggingOPtionGroupName); int sourceIndex = this.viewModel.OptionGroups.IndexOf(sourceViewModel); int targetIndex = this.viewModel.OptionGroups.IndexOf(targetViewModel); this.viewModel.ReOrderOptionGroups(sourceIndex, targetIndex); } } } }
private void grpBoxOptionGroup_PreviewDragOver(object sender, DragEventArgs e) { if (!e.Data.GetDataPresent(Constants.OPTION_DRAG_KEY) || sender == e.Source) { e.Effects = DragDropEffects.None; } else { Tuple <IOptionGroupViewModel, int, ICharacterOption> dragDropDataTuple = e.Data.GetData(Constants.OPTION_DRAG_KEY) as Tuple <IOptionGroupViewModel, int, ICharacterOption>; IOptionGroupViewModel sourceViewModel = dragDropDataTuple.Item1; if (sourceViewModel != this.viewModel && this.viewModel.OptionGroup.Type != OptionType.Mixed) { e.Effects = DragDropEffects.None; } } if (e.Effects != DragDropEffects.None && !this.ExpanderOptionGroup.IsExpanded) { this.ExpanderOptionGroup.IsExpanded = expanderExpandedForDrop = true; } e.Handled = true; }