private bool GroupValueEquals(HeaderItemWrapper headerWrapperA, int itemIndexB) { if (itemIndexB < 0) { return(false); } var headerWrapperB = GetGroupHeader(itemIndexB); return(headerWrapperA != null && headerWrapperB != null && Equals(headerWrapperA.GroupingValue, headerWrapperB.GroupingValue)); }
private FrameworkElement GetOrCreateGroupHeader(int itemIndex, HeaderItemWrapper headerWrapper, FrameworkElement lvParent, out bool newCreated) { if (headerWrapper.HeaderItem != null) { newCreated = false; return(headerWrapper.HeaderItem); } var headerItem = new GroupHeaderItem() { FirstItem = _items[itemIndex], GroupingValue = headerWrapper.GroupingValue }; newCreated = true; var result = PrepareGroupHeader(headerItem, lvParent); headerItem.LogicalParent = result; headerWrapper.HeaderItem = result; return(result); }
private HeaderItemWrapper GetGroupHeader(int itemIndex) { var headerWrapper = _materializedGroupHeaders[itemIndex]; if (headerWrapper != null) { return(headerWrapper); } if (_groupingValueProvider != null) { headerWrapper = new HeaderItemWrapper(_groupingValueProvider.GetGroupingValue(_items[itemIndex])); } else { // to get the grouping value of the item we use a dummy header item and apply the DataContext and group value binding to it if (_getValueGroupHeader == null) { _getValueGroupHeader = new GroupHeaderItem(); var dd = new SimplePropertyDataDescriptor(_getValueGroupHeader, typeof(GroupHeaderItem).GetProperty("GroupingValue")); var binding = MpfCopyManager.DeepCopyCutLVPs(_groupPropertyBinding); binding.SetTargetDataDescriptor(dd); binding.Activate(); } _getValueGroupHeader.DataContext = new BindingExtension() { Source = _items[itemIndex], Path = "." }; // then we create the actual header item and apply the value to it headerWrapper = new HeaderItemWrapper(_getValueGroupHeader.GroupingValue); // finally cleanup the datacontext binding MPF.TryCleanupAndDispose(_getValueGroupHeader.DataContext); _getValueGroupHeader.DataContext = null; } _materializedGroupHeaders[itemIndex] = headerWrapper; return(headerWrapper); }