/// <summary> /// Provides a secure method for setting the Behaviors property. /// This dependency property indicates .... /// </summary> private static void SetRoutes(DependencyObject d, BehaviorBindingCollection value) { d.SetValue(RoutesPropertyKey, value); INotifyCollectionChanged collection = (INotifyCollectionChanged)value; collection.CollectionChanged += new NotifyCollectionChangedEventHandler(CollectionChanged); }
public static BehaviorBindingCollection GetRoutes(DependencyObject d) { if (d == null) { throw new InvalidOperationException("The dependency object trying to attach to is set to null"); } if (!WpfHelper.IsInDesignMode) { BehaviorBindingCollection collection = d.GetValue(MvcRouteCollection.RoutesProperty) as BehaviorBindingCollection; if (collection == null) { collection = new BehaviorBindingCollection(); collection.Owner = d; SetRoutes(d, collection); } return(collection); } return(new BehaviorBindingCollection()); }
static void CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { BehaviorBindingCollection sourceCollection = (BehaviorBindingCollection)sender; switch (e.Action) { //when an item(s) is added we need to set the Owner property implicitly case NotifyCollectionChangedAction.Add: if (e.NewItems != null) { foreach (RouteSetter item in e.NewItems) { item.Owner = sourceCollection.Owner; } } break; //when an item(s) is removed we should Dispose the BehaviorBinding case NotifyCollectionChangedAction.Remove: if (e.OldItems != null) { foreach (RouteSetter item in e.OldItems) { item.Behavior.Dispose(); } } break; //here we have to set the owner property to the new item and unregister the old item case NotifyCollectionChangedAction.Replace: if (e.NewItems != null) { foreach (RouteSetter item in e.NewItems) { item.Owner = sourceCollection.Owner; } } if (e.OldItems != null) { foreach (RouteSetter item in e.OldItems) { item.Behavior.Dispose(); } } break; //when an item(s) is removed we should Dispose the BehaviorBinding case NotifyCollectionChangedAction.Reset: if (e.OldItems != null) { foreach (RouteSetter item in e.OldItems) { item.Behavior.Dispose(); } } break; case NotifyCollectionChangedAction.Move: default: break; } }