public void Dispose()
 {
     if (RefCount-- == 0)
     {
         CachedProperty p = Holder._first;
         while (p != null)
         {
             if (p.Update())
             {
                 Holder.NotifyOfPropertyChange(p._p.Name);
             }
             p = p._next;
         }
         Holder._delay = null;
     }
 }
 protected void AddProperty <THolder, TProperty>(THolder holder, Expression <Func <THolder, TProperty> > property)
 {
     _first = new CachedProperty <TProperty>(holder, CK.Reflection.ReflectionHelper.GetPropertyInfo(holder, property), _first);
 }
 protected CachedProperty(object o, PropertyInfo p, CachedProperty next)
 {
     _o    = o;
     _p    = p;
     _next = next;
 }