protected virtual void FirePropertyChangedEvent(object propertyKey, int propertyCode, Object oldValue, Object newValue) {
PPropertyEventArgs e = null;
// Fire the event to handlers registered for this particular property change event.
PPropertyEventHandler h = GetPropertyHandlers(propertyKey);
if (h != null) {
e = new PPropertyEventArgs(oldValue, newValue);
h(this, e);
}
if (parent != null && (propertyCode & propertyChangeParentMask) != 0) {
if (e == null) e = new PPropertyEventArgs(oldValue, newValue);
parent.FireChildPropertyChangedEvent(e, propertyKey, propertyCode);
}
}