internal double AddOneChild(RealizedItemsInfo info) { var child = _generator.ContainerFromIndex(_info.Next); if (child == null) { var materialized = _generator.Materialize(_info.Next, _items.ElementAt(_info.Next)); child = materialized.ContainerControl; _panel.Children.Add(child); child.Measure(Size.Infinity); PdmLogger.Log(2, PdmLogger.IndentEnum.Nothing, $"Add new Item {child.DataContext} to {this} {_info._currentOffset:0.00}"); if (VirtualizingAverages.AddContainerSize(_groupControl.TemplatedParent, _items.ElementAt(_info.Next), child)) { _owner.InvalidateMeasure(); } } else { if (child is GroupItem gi) { gi.Presenter?.InvalidateMeasure(); } if (_id == 402) { } child.Measure(Size.Infinity); PdmLogger.Log(2, PdmLogger.IndentEnum.Nothing, $"Add old Item {child.DataContext} to {this} {_info._currentOffset:0.00}"); if (VirtualizingAverages.AddContainerSize(_groupControl.TemplatedParent, _items.ElementAt(_info.Next), child)) { _owner.InvalidateMeasure(); } } return(_info.Vert ? child.DesiredSize.Height : child.DesiredSize.Width); }
internal void AddGroup(RealizedItemsInfo info, IItemContainerGenerator generator, int scrollPos) { var previousNumInfullView = NumInFullView; RemoveOld(); foreach (var item in generator.Containers) { var res = item.ContainerControl.TranslatePoint(new Point(0, 0), _panel); var itemPos = (item.Item is IGroupingView gv) ? gv.ItemScrollStart : item.Index + info.ScrollOffset; if (!RealizedIndex.TryGetValue(itemPos, out var realizedInfo)) { realizedInfo = new RealizedItemInfo(); RealizedIndex.Add(itemPos, realizedInfo); } realizedInfo.Set(item); realizedInfo.RelativeOffset = res.Value.Y; } NumInFullView = GetNumInView(scrollPos); if (NumInFullView == 8) { } if (previousNumInfullView != NumInFullView) { _scrollContentPresenter.InvalidateArrange(); } }
public RealizedItems(ItemsPresenter owner, GroupController groupControl, int id) { _owner = owner; _panel = owner.Panel; _items = owner.Items; _generator = owner.ItemContainerGenerator; _scrollViewer = owner.FindAncestorOfType <ScrollViewer>(); _id = id; _cache = owner.VirtualizingCache; _groupControl = groupControl; if (owner.VirtualizationMode == ItemVirtualizationMode.Logical) { _info = new RealizedItemsInfo2(_items, groupControl.Vertical, _cache, groupControl.TemplatedParent); } else { _info = new RealizedItemsInfo(_items, groupControl.Vertical, _cache, groupControl.TemplatedParent); } }