System.Windows.Data.StandardPropertyPathNode.OnSourceChanged C# (CSharp) Method

OnSourceChanged() protected method

protected OnSourceChanged ( object oldSource, object newSource ) : void
oldSource object
newSource object
return void
		protected override void OnSourceChanged (object oldSource, object newSource)
		{
			base.OnSourceChanged (oldSource, newSource);

			var old_do = oldSource as DependencyObject;
			var new_do = newSource as DependencyObject;
			if (dpChanged != null) {
				Mono.NativeMethods.dependency_object_remove_property_change_handler (((DependencyObject) oldSource).native, DependencyProperty.Native, dpChanged);
				dpChanged = null;
			}

			DependencyProperty = null;
			PropertyInfo = null;
			if (Source == null)
				return;

			var type = Source.GetType ();
			if (TypeName != null)
				type = Application.GetComponentTypeFromName (TypeName);

			if (type == null)
				return;

			PropertyInfo = type.GetProperty (PropertyName);
			DependencyProperty prop;
			Types.Ensure (type);
			if (DependencyProperty.TryLookup (Deployment.Current.Types.TypeToKind (type), PropertyName, out prop)) {
				DependencyProperty = prop;
				dpChanged = DPChanged;
				Mono.NativeMethods.dependency_object_add_property_change_handler (new_do.native, DependencyProperty.Native, dpChanged, IntPtr.Zero);
			}
		}