/// <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);
        }