예제 #1
0
        /// <summary>
        /// Method triggered by the TreeListViewDragDropBehavior Class. Takes care of moving on item in the tree, which can be from
        /// any level to any level
        /// </summary>
        /// <param name="destination"></param>
        public void MoveSelection(TreeListViewRow destination) // Collection<ObjectModel> selectedItems, ObjectModel destination )
        {
            if (destination != null)
            {
                ObjectModel destinationItem = (destination.DataContext) as ObjectModel;
                try
                {
                    // Setup a private collection with the selected items only. This is because the SelectedItems that are part of the view model collection
                    // will change as soon as we start removing and adding objects
                    TD.ObservableItemCollection <ObjectModel> selectedItems = new TD.ObservableItemCollection <ObjectModel>();
                    foreach (ObjectModel item in SelectedItems)
                    {
                        selectedItems.Add(item);
                    }

                    foreach (ObjectModel item in selectedItems)
                    {
                        // find the original parent of the object that's moved
                        ObjectModel parentSourceItem = GetObject(item.Parent_ID);

                        // If the parent is in the root level
                        if (parentSourceItem == null)
                        {
                            // Remove the item in the root level
                            Objects.Remove(item);
                        }
                        else
                        {
                            // Otherwise remove the item from the child collection
                            parentSourceItem.ChildObjects.Remove(item);
                        }

                        TreeListViewDropPosition relativeDropPosition = (TreeListViewDropPosition)destination.GetValue(RadTreeListView.DropPositionProperty);
                        destination.UpdateLayout();
                        // If put on top of destination
                        if (relativeDropPosition == TreeListViewDropPosition.Inside)
                        {
                            // the Parent_ID of the item will become the ID of the destination
                            item.Parent_ID = destinationItem.ID;
                            destinationItem.ChildObjects.Add(item);
                        }
                        // If put before or after the destination
                        else
                        {
                            // if the desitination is in the root collection
                            if (destinationItem.Parent_ID == null)
                            {
                                // The parent_ID of the item will also be null
                                item.Parent_ID = null;
                                Objects.Insert(Objects.IndexOf(destinationItem), item);
                            }
                            else
                            {
                                // otherwise the Parent_ID of the item will be the same as that of the destination item
                                item.Parent_ID = destinationItem.Parent_ID;
                                // find the Parent of the destination item
                                parentSourceItem = GetObject(destinationItem.Parent_ID);
                                // Insert the item before or after the destination item in the ChildObject collection of the parent of the destination
                                if (relativeDropPosition == TreeListViewDropPosition.Before)
                                {
                                    parentSourceItem.ChildObjects.Insert(parentSourceItem.ChildObjects.IndexOf(destinationItem), item);
                                }
                                else
                                {
                                    parentSourceItem.ChildObjects.Insert(parentSourceItem.ChildObjects.IndexOf(destinationItem) + 1, item);
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    RadWindow.Alert(new DialogParameters()
                    {
                        Header  = "Error",
                        Content = "Error while moving object\n" + ex.Message
                    });
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Method triggered by the TreeListViewDragDropBehavior Class. Takes care of moving on item in the tree, which can be from
        /// any level to any level
        /// </summary>
        /// <param name="destination"></param>
        public void MoveSelection(TreeListViewRow destination) // Collection<PropertyModel> selectedItems, PropertyModel destination )
        {
            if (destination != null)
            {
                PropertyModel destinationItem = (destination.DataContext) as PropertyModel;
                try
                {
                    // Setup a private collection with the selected items only. This is because the SelectedItems that are part of the view model collection
                    // will change as soon as we start removing and adding objects
                    TD.ObservableItemCollection <PropertyModel> selectedItems = new TD.ObservableItemCollection <PropertyModel>();
                    foreach (PropertyModel item in SelectedItems)
                    {
                        selectedItems.Add(item);
                    }

                    foreach (PropertyModel item in selectedItems)
                    {
                        // find the original parent of the object that's moved
                        PropertyModel parentSourceItem = GetProperty(item.Parent_ID);

                        // If the parent is in the root level
                        if (parentSourceItem == null)
                        {
                            // Remove the item in the root level
                            Properties.Remove(item);
                        }
                        else
                        {
                            // Otherwise remove the item from the child collection
                            parentSourceItem.ChildProperties.Remove(item);
                        }

                        TreeListViewDropPosition relativeDropPosition = (TreeListViewDropPosition)destination.GetValue(RadTreeListView.DropPositionProperty);
                        destination.UpdateLayout();
                        // If put on top of destination
                        if (relativeDropPosition == TreeListViewDropPosition.Inside)
                        {
                            // the Parent_ID of the item will become the ID of the destination
                            item.Parent_ID = destinationItem.ID;
                            destinationItem.ChildProperties.Add(item);
                        }
                        // If put before or after the destination
                        else
                        {
                            // if the desitination is in the root collection
                            if (destinationItem.Parent_ID == null)
                            {
                                // The parent_ID of the item will also be null
                                item.Parent_ID = null;
                                Properties.Insert(Properties.IndexOf(destinationItem), item);
                            }
                            else
                            {
                                // otherwise the Parent_ID of the item will be the same as that of the destination item
                                item.Parent_ID = destinationItem.Parent_ID;
                                // find the Parent of the destination item
                                parentSourceItem = GetProperty(destinationItem.Parent_ID);
                                // Insert the item before or after the destination item in the ChildObject collection of the parent of the destination
                                if (relativeDropPosition == TreeListViewDropPosition.Before)
                                {
                                    parentSourceItem.ChildProperties.Insert(parentSourceItem.ChildProperties.IndexOf(destinationItem), item);
                                }
                                else
                                {
                                    parentSourceItem.ChildProperties.Insert(parentSourceItem.ChildProperties.IndexOf(destinationItem) + 1, item);
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    RadWindow.Alert(ex.Message);
                }
            }
            //try
            //{
            //    // Setup a private collection with the selected items only. This is because the SelectedItems that are part of the view model collection
            //    // will change as soon as we start removing and adding objects
            //    TD.ObservableItemCollection<PropertyModel> selectedItems = new TD.ObservableItemCollection<PropertyModel>();
            //    foreach (PropertyModel item in SelectedItems)
            //    {
            //        selectedItems.Add(item);
            //    }

            //    foreach (PropertyModel item in selectedItems)
            //    {
            //        // find the original parent of the object that's moved
            //        PropertyModel parentSourceItem = GetProperty(item.Parent_ID);

            //        // If the parent is in the root level
            //        if (parentSourceItem == null)
            //            // Remove the item in the root level
            //            Properties.Remove(item);
            //        else
            //            // Otherwise remove the item from the child collection
            //            parentSourceItem.ChildProperties.Remove(item);


            //        if (destination != null)
            //        {
            //            TreeListViewDropPosition relativeDropPosition = (TreeListViewDropPosition)destination.GetValue(RadTreeListView.DropPositionProperty);
            //            PropertyModel destinationItem = (destination.DataContext) as PropertyModel;
            //            // If put on top of destination
            //            if (relativeDropPosition == TreeListViewDropPosition.Inside)
            //            {
            //                // the Parent_ID of the item will become the ID of the destination
            //                item.Parent_ID = destinationItem.ID;
            //                destinationItem.ChildProperties.Add(item);
            //            }
            //            // If put before or after the destination
            //            else
            //            {
            //                // if the desitination is in the root collection
            //                if (destinationItem.Parent_ID == null)
            //                {
            //                    // The parent_ID of the item will also be null
            //                    item.Parent_ID = null;
            //                    Properties.Insert(Properties.IndexOf(destinationItem), item);
            //                }
            //                else
            //                {
            //                    // otherwise the Parent_ID of the item will be the same as that of the destination item
            //                    item.Parent_ID = destinationItem.Parent_ID;
            //                    // find the Parent of the destination item
            //                    parentSourceItem = GetProperty(destinationItem.Parent_ID);
            //                    // Insert the item above the destination item in the ChildObject collection of the parent of the destination
            //                    if (relativeDropPosition == TreeListViewDropPosition.Before)
            //                        parentSourceItem.ChildProperties.Insert(parentSourceItem.ChildProperties.IndexOf(destinationItem), item);
            //                    else
            //                        parentSourceItem.ChildProperties.Insert(parentSourceItem.ChildProperties.IndexOf(destinationItem) + 1, item);
            //                }
            //            }

            //        }
            //        else // destination is null, i.e. below the tree
            //        {
            //            item.Parent_ID = null;
            //            Properties.Add(item);
            //        }
            //    }
            //}
            //catch (Exception ex)
            //{
            //    RadWindow.Alert(ex.Message);
            //}
        }