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 RegisterBinding(LiveShapingItem <T> liveShapingItem, LiveShapingProperty lsp, DependencyProperty dp)
 {
     liveShapingItem.AddBinding(lsp.PropertyName, dp);
     if (lsp.Category == LiveShapingCategory.Sorting)
     {
         PropertyChangedEventManager.AddHandler(liveShapingItem.Item, OnItemSortPropertyChanged, lsp.PropertyName);
     }
 }
        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));
        }