private void Drag(IDataSourceViewModel source, IDataSourceViewModel dest)
        {
            var merged = dest as MergedDataSourceViewModel;
            if (merged != null)
            {
                // Drag from ungrouped onto an existing group
                // => add to existing group
                AddFileToGroup(source, merged);
            }
            else
            {
                // Drag from ungrouped onto a dest within a group
                // => find group of dest and addd to it
                merged = dest.Parent as MergedDataSourceViewModel;
                if (merged != null)
                {
                    AddFileToGroup(source, merged);
                }
                else
                {
                    // Drag from ungrouped onto another ungrouped source
                    // => remove dest as well and create new group
                    int destIndex = _observable.IndexOf(dest);
                    if (destIndex != -1)
                    {
                        _observable.Remove(dest);

                        MergedDataSource mergedDataSource = _dataSources.AddGroup();
                        merged = new MergedDataSourceViewModel(mergedDataSource);
                        merged.Remove += OnRemove;
                        merged.AddChild(source);
                        merged.AddChild(dest);
                        _observable.Insert(destIndex, merged);
                        SelectedItem = merged;
                    }
                }
            }
        }
 private static void AddFileToGroup(IDataSourceViewModel source, MergedDataSourceViewModel viewModel)
 {
     viewModel.AddChild(source);
 }