public void Detach() { if (this.RelayInstance != null) { // first: reset member to prevent further eventing of ValueChanged event. RelayObject temp = this.RelayInstance; this.RelayInstance = null; // second: clear the binding -> raises property changed event... temp.ClearValue(RelayObject.ValueProperty); } }