/// <summary> /// Gets the validation target expression. /// </summary> public static string GetValidationTargetExpression(DotvvmBindableObject control) { if (!(bool)control.GetValue(Validation.EnabledProperty)) { return(null); } // find the closest control int dataSourceChanges; var validationTargetControl = control.GetClosestControlValidationTarget(out dataSourceChanges); if (validationTargetControl == null) { return("$root"); } // reparent the expression to work in current DataContext var validationBindingExpression = validationTargetControl.GetValueBinding(Validation.TargetProperty); string validationExpression = validationBindingExpression.GetKnockoutBindingExpression(); validationExpression = string.Join("", Enumerable.Range(0, dataSourceChanges).Select(i => "$parentContext.")) + validationExpression; return(validationExpression); }