protected virtual void OnPropertyChanged(
			DependencyProperty dp, object oldValue, object newValue)
        {
            if (PropertyChanged != null)
                PropertyChanged(
                    this, new DependencyPropertyChangedEventArgs(dp, oldValue, newValue));
        }
 public object GetValue(DependencyProperty property)
 {
     if (properties != null
         && properties.ContainsKey(property))
         return properties[property];
     if (property.DefaultMetadata != null
         && property.DefaultMetadata.DefaultValue != null)
         return property.DefaultMetadata.DefaultValue;
     return GetDefaultValueOfType (property.PropertyType);
 }
 public static DependencyProperty RegisterAttached(string name, Type propertyType, Type ownerType, PropertyMetadata metadata)
 {
     var prop = new DependencyProperty(name, propertyType, ownerType, metadata);
     attachedProperties.Add(prop);
     return prop;
 }
        /// <summary>
        /// Eigenschaft als gesetzt markieren
        /// </summary>
        /// <param name="property">Property.</param>
        protected void SetPropertyAsAssigned(DependencyProperty property)
        {
            if (propertySet == null)
            {
            #if WINDOWS_PHONE
                propertySet = new List<DependencyProperty>();
            #else
                propertySet = new HashSet<DependencyProperty>();
            #endif
            }

            if (!propertySet.Contains(property))
                propertySet.Add(property);
        }
        protected virtual void OnPropertyChanging(
			DependencyProperty dp, object oldValue, object newValue)
        {
        }
 /// <summary>
 /// Gibt true zurück, wenn die zugehörige DependencyProperty vor dem initialisieren zugewiesen wurde,
 /// - Wenn zugewiesen, kann die DependencyProperty nicht mehr über einen Style verändert werden.
 /// </summary>
 internal bool IsAssignedProperty(DependencyProperty dp)
 {
     return propertySet != null && propertySet.Contains(dp);
 }
 public void SetValue(DependencyProperty property, object value)
 {
     SetValue(property, value, true);
 }
        protected void SetValue(DependencyProperty property, object value, bool setAsAssigned)
        {
            if (properties == null)
                properties = new Dictionary<DependencyProperty, object>();

            // Zieltyp prüfen
            if (value != null && !property.PropertyType.IsAssignableFrom(value.GetType()))
                throw new InvalidCastException();

            var oldValue = properties.ContainsKey(property) ? properties[property] : null;
            if ((oldValue == null && value != null)
                || (oldValue != null && value == null)
                || (oldValue != null && value != null && !oldValue.Equals(value)))
            {

                OnPropertyChanging(property, oldValue, value);
                properties[property] = value;
                OnPropertyChanged(property, oldValue, value);

                if (setAsAssigned)
                {
                    // Eigenschaft als gesetzt markieren,
                    // AssignedProperties können nicht mehr vom Style überschrieben werden
                    SetPropertyAsAssigned(property);
                }

                // TODO DefaultValue Metadata...

                if (property.DefaultMetadata != null
                    && property.DefaultMetadata.PropertyChangedCallback != null)
                    property.DefaultMetadata.PropertyChangedCallback(
                        this, new DependencyPropertyChangedEventArgs(
                            property, oldValue, value));
            }
        }