예제 #1
0
        /// <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);
        }