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