public static IDisposable SetDisposableBinding(this DependencyObject target, DependencyProperty dependencyProperty, Binding binding, bool restoreValue = false) { var localValue = target.ReadLocalValue(dependencyProperty); var weakRef = new WeakReference(target); BindingOperations.SetBinding(target, dependencyProperty, binding); return(DelegateDisposable.Create(delegate { var reference = weakRef.GetTarget <DependencyObject>(); if (reference == null) { return; } if (reference.ReadLocalBinding(dependencyProperty) != binding) { return; } if (restoreValue == false) { reference.ClearValue(dependencyProperty); } else { reference.RestoreLocalValue(dependencyProperty, localValue); } })); }
public NotifyCollectionEventDispatcher(INotifyCollectionChanged notifier, Action <T> onItemAdded, Action <T> onItemRemoved, Action onReset) : base(onItemAdded, onItemRemoved, onReset) { _disposer = DelegateDisposable.Create(() => notifier.CollectionChanged += OnCollectionChangedHandler, () => notifier.CollectionChanged -= OnCollectionChangedHandler); }
public static IDisposable Suspend(BoolSuspender suspender) { return(DelegateDisposable.Create(suspender.Suspend, suspender.Resume)); }