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)); }
private NotifyCollectionChangedEventHandler CreateCollectionChangedEventHandlerFor(LiveShapingCategory category) { return((sender, args) => { if (args.Action == NotifyCollectionChangedAction.Reset) { ClearAllLiveShapingPropertiesOf(category); ((IEnumerable <string>)sender).ForEach( newPropertyName => AddLiveShapingProperty(newPropertyName, category)); } else if (args.Action != NotifyCollectionChangedAction.Move) { args.OldItems?.Cast <string>() .ForEach(oldPropertyName => RemoveLiveShapingProperty(oldPropertyName, category)); args.NewItems?.Cast <string>() .ForEach(newPropertyName => AddLiveShapingProperty(newPropertyName, category)); } }); }
public LiveShapingProperty(string propertyName, LiveShapingCategory category) { PropertyName = propertyName; Category = category; }
private static string GetDependencyPropertyNameFor(string propertyName, LiveShapingCategory category) => $"{category} {typeof(T).Name} {propertyName} (Live)";