private void RemoveLiveShapingProperty(string oldSortPropertyName, LiveShapingCategory category)
        {
            var liveShapingProperty = new LiveShapingProperty(oldSortPropertyName, category);
            var oldDp = ActiveDependencyProperties[liveShapingProperty];

            LiveShapingItems.Values.ForEach(lsi => lsi.RemoveBinding(oldDp));
            ActiveDependencyProperties.Remove(liveShapingProperty);
        }
        private void AddLiveShapingProperty(string newPropertyName, LiveShapingCategory category)
        {
            var newDp = DependencyPropertiesCache.GetOrAdd(GetDependencyPropertyNameFor(newPropertyName, category),
                                                           name => DependencyProperty.Register(name, typeof(object), typeof(LiveShapingSortedValueList <>)));

            var lsp = new LiveShapingProperty(newPropertyName, category);

            ActiveDependencyProperties.Add(lsp, newDp);
            LiveShapingItems.Values.ForEach(lsi => RegisterBinding(lsi, lsp, newDp));
        }
        private void ClearAllLiveShapingPropertiesOf(LiveShapingCategory category)
        {
            List <LiveShapingProperty> lspsToRemove = new List <LiveShapingProperty>();

            foreach (var adpPair in ActiveDependencyProperties.Where(pair => pair.Key.Category == category))
            {
                var dependencyProperty = adpPair.Value;
                LiveShapingItems.Values.ForEach(lsi => lsi.RemoveBinding(dependencyProperty));

                lspsToRemove.Add(adpPair.Key);
            }

            lspsToRemove.ForEach(lsp => ActiveDependencyProperties.Remove(lsp));
        }