Example #1
0
        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));
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }