コード例 #1
0
 private BindingMemberVisitor(BindingMemberVisitor innerVisitor, IEnumerable<string> lambdaParameters)
     : this()
 {
     _members = innerVisitor._members;
     _staticNodes = innerVisitor._staticNodes;
     if (innerVisitor._lamdaParameters != null)
         _lamdaParameters.AddRange(innerVisitor._lamdaParameters);
     _lamdaParameters.AddRange(lambdaParameters);
     BindingExtensions.CheckDuplicateLambdaParameter(_lamdaParameters);
 }
コード例 #2
0
 private BindingMemberVisitor(BindingMemberVisitor innerVisitor, IEnumerable<string> lambdaParameters, IDataContext context)
     : this()
 {
     _ignoreLambda = true;
     _members = innerVisitor._members;
     _staticNodes = innerVisitor._staticNodes;
     if (innerVisitor._lamdaParameters != null)
         _lamdaParameters.AddRange(innerVisitor._lamdaParameters);
     _lamdaParameters.AddRange(lambdaParameters);
     Context = context;
     BindingExtensions.CheckDuplicateLambdaParameter(_lamdaParameters);
 }
コード例 #3
0
 private BindingMemberVisitor(BindingMemberVisitor innerVisitor, IEnumerable <string> lambdaParameters)
     : this()
 {
     _members     = innerVisitor._members;
     _staticNodes = innerVisitor._staticNodes;
     if (innerVisitor._lamdaParameters != null)
     {
         _lamdaParameters.AddRange(innerVisitor._lamdaParameters);
     }
     _lamdaParameters.AddRange(lambdaParameters);
     BindingExtensions.CheckDuplicateLambdaParameter(_lamdaParameters);
 }
コード例 #4
0
 private BindingMemberVisitor(BindingMemberVisitor innerVisitor, IEnumerable <string> lambdaParameters, IDataContext context)
     : this()
 {
     _ignoreLambda = true;
     _members      = innerVisitor._members;
     _staticNodes  = innerVisitor._staticNodes;
     if (innerVisitor._lamdaParameters != null)
     {
         _lamdaParameters.AddRange(innerVisitor._lamdaParameters);
     }
     _lamdaParameters.AddRange(lambdaParameters);
     Context = context;
     BindingExtensions.CheckDuplicateLambdaParameter(_lamdaParameters);
 }
コード例 #5
0
        public BindingParser()
        {
            _cache = new Dictionary<string, KeyValuePair<KeyValuePair<string, int>, Action<IDataContext>[]>[]>(StringComparer.Ordinal);
            _defaultContext = new DataContext();
            _handlers = new List<IBindingParserHandler> { new DefaultBindingParserHandler() };
            _defaultTokenizer = new Tokenizer(true);
            _memberVisitor = new BindingMemberVisitor();
            _counterVisitor = new ExpressionCounterVisitor();
            _binaryOperationTokens = new Dictionary<TokenType, int>
            {
                {TokenType.QuestionDot, 101},
                {TokenType.Asterisk, 100},
                {TokenType.Slash, 100},
                {TokenType.Percent, 100},
                {TokenType.Plus, 99},
                {TokenType.Minus, 99},
                {TokenType.ExclamationEqual, 98},
                {TokenType.GreaterThan, 98},
                {TokenType.LessThan, 98},
                {TokenType.GreaterThanEqual, 98},
                {TokenType.LessThanEqual, 98},
                {TokenType.Equal, 97},
                {TokenType.DoubleEqual, 97},
                {TokenType.Amphersand, 96},
                {TokenType.Bar, 95},
                {TokenType.DoubleAmphersand, 94},
                {TokenType.DoubleBar, 93},
            };

            _unaryOperationTokens = new HashSet<TokenType>
            {
                TokenType.Minus,
                TokenType.Exclamation,
                TokenType.Tilde
            };

            _bindingParameterToAction = new Dictionary<string, Func<BindingParser, IList<Action<IDataContext>>>>(StringComparer.OrdinalIgnoreCase)
            {
                {"Mode", parser => parser.GetBindingModeSetter()},
                {"M", parser => parser.GetBindingModeSetter()},
                {"ValidatesOnNotifyDataErrors", parser => parser.GetBehaviorSetter(ValidatesOnNotifyDataErrorsBehavior.Prototype)},
                {"ValidatesOnErrors", parser => parser.GetBehaviorSetter(ValidatesOnNotifyDataErrorsBehavior.Prototype)},
                {"ValidatesOnExceptions", parser => parser.GetBehaviorSetter(ValidatesOnExceptionsBehavior.Instance)},
                {"Validate", parser => parser.GetBehaviorSetter(ValidatesOnNotifyDataErrorsBehavior.Prototype, ValidatesOnExceptionsBehavior.Instance)},
                {"DefaultValueOnException", parser => parser.GetDefaultValueOnExceptionSetter()},
                {"SetDefaultValue", parser => parser.GetDefaultValueOnExceptionSetter()},
                {"Delay", parser => parser.GetDelaySetter(false)},
                {"SourceDelay", parser => parser.GetDelaySetter(false)},
                {"TargetDelay", parser => parser.GetDelaySetter(true)},
                {"Converter", parser => parser.GetConverterSetter()},
                {"Conv", parser => parser.GetConverterSetter()},
                {"ConverterParameter", parser => parser.GetConverterParameterSetter()},
                {"ConverterCulture", parser => parser.GetConverterCultureSetter()},
                {"Fallback", parser => parser.GetFallbackSetter()},
                {"TargetNullValue", parser => parser.GetTargetNullValueSetter()},
                {AttachedMemberConstants.CommandParameter, parser => parser.GetCommandParameterSetter()},
                {"Behavior", parser => parser.GetCustomBehaviorSetter()},
                {nameof(BindingBuilderConstants.ToggleEnabledState), parser => parser.GetBoolValue(BindingBuilderConstants.ToggleEnabledState)},
                {"ToggleEnabled", parser => parser.GetBoolValue(BindingBuilderConstants.ToggleEnabledState)},
                {"DisableEqualityChecking", parser => parser.GetDisableEqualityChecking(null)},
                {"TargetDisableEqualityChecking", parser => parser.GetDisableEqualityChecking(true)},
                {"SourceDisableEqualityChecking", parser => parser.GetDisableEqualityChecking(false)},
                {nameof(BindingBuilderConstants.HasStablePath), parser => parser.GetBoolValue(BindingBuilderConstants.HasStablePath) },
                {nameof(BindingBuilderConstants.Observable), parser => parser.GetBoolValue(BindingBuilderConstants.Observable) },
                {nameof(BindingBuilderConstants.Optional), parser => parser.GetBoolValue(BindingBuilderConstants.Optional) }
            };

            _binaryOperationAliases = new Dictionary<string, TokenType>(StringComparer.OrdinalIgnoreCase)
            {
                {"and", TokenType.DoubleAmphersand},
                {"or", TokenType.DoubleBar},
                {"mod", TokenType.Percent}
            };

            _unaryOperationAliases = new Dictionary<string, TokenType>(StringComparer.OrdinalIgnoreCase)
            {
                {"not", TokenType.Exclamation}
            };

            _relativeSourceAliases = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            {
                RelativeSourceExpressionNode.RelativeSourceType,
                "Relative",
                "Rel"
            };

            _elementSourceAliases = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
            {
                RelativeSourceExpressionNode.ElementSourceType,
                "Element",
                "El"
            };
        }