/// <summary> /// Attaches the source. /// </summary> /// <param name="source"> /// The source. /// </param> protected override void AttachSource(object source) { base.AttachSource(source); if (source != null && source.GetType().ContainsEvent(WeakCollectionBinding.CollectionChangedEventName)) { if (collectionWeakEvent != null) { collectionWeakEvent.DetachEvent(); } if (collectionWeakEvent == null) { collectionWeakEvent = new WeakEvent(this); } collectionWeakEvent.AttachEvent(source, null, WeakCollectionBinding.CollectionChangedEventName, "OnSourceCollectionChanged"); } }
/// <summary> /// UnWatch the source property. /// </summary> /// <param name="source"> /// The source. /// </param> /// <param name="property"> /// The property. /// </param> /// <returns> /// The <see cref="WeakCommandBinding"/>. /// </returns> /// <exception cref="System.ArgumentNullException"> /// The source can not be null. /// </exception> public WeakCommandBinding UnWatch(object source, string property) { if (source == null) { throw new ArgumentNullException("source"); } var bindSource = new BindContext(source, property); var entry = new WeakEntry(null, bindSource.Source, property); if (this.watchEvents.ContainsKey(entry)) { WeakEvent watchEvent = this.watchEvents[entry]; watchEvent.DetachEvent(); this.watchEvents.Remove(entry); } this.RaiseCanExecuteChanged(); return(this); }