/// <summary> /// Dynamically change this Expression sources (availiable only for NonShareable /// Expressions) /// </summary> /// <remarks> /// Expression must be in use on provided DependencyObject/DependencyProperty. /// GetSources must reflect the old sources to be replaced by the provided newSources. /// </remarks> /// <param name="d">DependencyObject whose sources are to be updated</param> /// <param name="dp">The property that the Expression is set to</param> /// <param name="newSources">New sources</param> internal void ChangeSources(DependencyObject d, DependencyProperty dp, DependencySource[] newSources) { if (d == null && !ForwardsInvalidations) { throw new ArgumentNullException("d"); } if (dp == null && !ForwardsInvalidations) { throw new ArgumentNullException("dp"); } if (Shareable) { throw new InvalidOperationException(SR.Get(SRID.ShareableExpressionsCannotChangeSources)); } DependencyObject.ValidateSources(d, newSources, this); // Additional validation in callee if (ForwardsInvalidations) { DependencyObject.ChangeExpressionSources(this, null, null, newSources); } else { DependencyObject.ChangeExpressionSources(this, d, dp, newSources); } }
internal void ChangeSources(DependencyObject d, DependencyProperty dp, DependencySource[] newSources) { if (d == null && !this.ForwardsInvalidations) { throw new ArgumentNullException("d"); } if (dp == null && !this.ForwardsInvalidations) { throw new ArgumentNullException("dp"); } if (this.Shareable) { throw new InvalidOperationException("ShareableExpressionsCannotChangeSources"); } DependencyObject.ValidateSources(d, newSources, this); if (this.ForwardsInvalidations) { DependencyObject.ChangeExpressionSources(this, null, null, newSources); return; } DependencyObject.ChangeExpressionSources(this, d, dp, newSources); }