protected T GetPropertyValue <T>(IPropertyDescriptor <T> propertyDescriptor)
        {
            if (propertyDescriptor == null)
            {
                throw new ArgumentNullException("propertyDescriptor");
            }

            T propertyValue;

            if (!propertyDescriptor.TryGetValue(out propertyValue))
            {
                propertyValue = propertyDescriptor.GetDefaultValue();
                UpdateAndFireNotifications(propertyDescriptor, propertyValue);
            }
            return(propertyValue);
        }