protected override Expression VisitMember(MemberExpression node)
        {
            if (IsPropertyChain(node.Expression))
            {
                if (node.NodeType == ExpressionType.MemberAccess)
                {
                    var expression = node.Expression as ConstantExpression;
                    if (expression != null)
                    {
                        AddNotifier(expression.Value);
                    }
                    else if (node.Expression is MemberExpression)
                    {
                        AddNotifier(GetValue((MemberExpression)node.Expression));
                    }
                    PropNames.Add(node.Member.Name);
                }
            }
            else if (node.NodeType == ExpressionType.Constant)
            {
                AddNotifier(((ConstantExpression)node.Expression).Value);
            }

            return(base.VisitMember(node));
        }
 private void RegisterNotifyingCollection(Expression node)
 {
     if (IsPropertyChain(node))
     {
         var expression = node as ConstantExpression;
         if (expression != null)
         {
             AddNotifier(expression.Value);
         }
         else if (node is MemberExpression)
         {
             MemberInfo member = ((MemberExpression)node).Member;
             var        info   = member as PropertyInfo;
             if (info != null && !PropNames.Contains(info.Name))
             {
                 var prop = info;
                 PropNames.Add(prop.Name);
             }
         }
     }
 }