protected override void OnRender(DrawingContext drawingContext) { if (_type.HasFlag(DataSourceDropType.ArrangeTop)) { drawingContext.DrawLine(_pen, new Point(0, 0), new Point(ActualWidth, 0)); } else if (_type.HasFlag(DataSourceDropType.ArrangeBottom)) { drawingContext.DrawLine(_pen, new Point(0, ActualHeight), new Point(ActualWidth, ActualHeight)); } }
private void DropToArrange(IDataSourceViewModel source, IDataSourceViewModel dest, DataSourceDropType dropType) { IDataSourceViewModel sourceParent = source.Parent; if (sourceParent != null) { // // When the source is part of a group, then any arrange is going to remove it // from said group. // var group = ((MergedDataSourceViewModel) sourceParent); group.RemoveChild(source); if (sourceParent != dest.Parent) { // // If both source and dest are part of different groups, then // we need to check if source's group needs to be dissolved due to // having only 1 child left. // DissolveGroupIfNecessary(group); } } else { _observable.Remove(source); } if (dest.Parent != null) { // // If the destination has a parent then we need to insert // the source into it's collection. // var merged = ((MergedDataSourceViewModel) dest.Parent); int index = merged.Observable.IndexOf(dest); if (dropType.HasFlag(DataSourceDropType.ArrangeBottom)) ++index; merged.Insert(index, source); } else { // // Otherwise we insert the source into the flat, or root // collection. // int index = _observable.IndexOf(dest); if (dropType.HasFlag(DataSourceDropType.ArrangeBottom)) ++index; if (index < 0) index = 0; _observable.Insert(index, source); } SelectedItem = source; }
private void DropToArrange(IDataSourceViewModel source, IDataSourceViewModel dest, DataSourceDropType dropType) { IDataSourceViewModel sourceParent = source.Parent; if (sourceParent != null) { // // When the source is part of a group, then any arrange is going to remove it // from said group. // var group = ((MergedDataSourceViewModel)sourceParent); group.RemoveChild(source); if (sourceParent != dest.Parent) { // // If both source and dest are part of different groups, then // we need to check if source's group needs to be dissolved due to // having only 1 child left. // DissolveGroupIfNecessary(group); } } else { _observable.Remove(source); } if (dest.Parent != null) { // // If the destination has a parent then we need to insert // the source into it's collection. // var merged = ((MergedDataSourceViewModel)dest.Parent); int index = merged.Observable.IndexOf(dest); if (dropType.HasFlag(DataSourceDropType.ArrangeBottom)) { ++index; } merged.Insert(index, source); } else { // // Otherwise we insert the source into the flat, or root // collection. // int index = _observable.IndexOf(dest); if (dropType.HasFlag(DataSourceDropType.ArrangeBottom)) { ++index; } if (index < 0) { index = 0; } _observable.Insert(index, source); if (dropType.HasFlag(DataSourceDropType.ArrangeTop)) { if (index + 1 < _observable.Count) { var tmp = source.DataSource.Settings; var before = _observable[index + 1].DataSource.Settings; _settings.DataSources.MoveBefore(tmp, before); } } } SelectedItem = source; _settings.SaveAsync(); }