protected override VisitStatus Visit <TProperty, TContainer, TValue>( TProperty property, ref TContainer container, ref TValue value, ref ChangeTracker changeTracker) { if (typeof(TValue).IsClass && null == value) { return(VisitStatus.Override); } var propName = property.GetName(); Add(propName); try { if (m_FullPathToElementsMap.TryGetValue(m_PropertyPathBuilder.ToString(), out var fullPathElements)) { foreach (var element in fullPathElements) { switch (m_Operation) { case BindingRegistration.None: Connectors.SetData(element, value); break; case BindingRegistration.Register: Connectors.RegisterCallback(element, value); break; case BindingRegistration.Unregister: Connectors.UnregisterCallback(element, value); break; default: throw new ArgumentOutOfRangeException(); } } } } finally { Remove(propName); } return(VisitStatus.Handled); }