public void OnDescendantUpdated(IInstanceBuilderContext context, ViewNode viewNode, ViewNode child, InstanceState childState) { }
public List <ViewNode> Validate(IInstanceBuilderContext context, out List <ExpressionSite> sites) { ExpressionSite expressionSite; bool flag; DocumentNode item; DocumentNode documentNode; DocumentNode item1; List <DocumentNode> documentNodes = new List <DocumentNode>(); List <ViewNode> viewNodes = new List <ViewNode>(); List <ViewNode> viewNodes1 = new List <ViewNode>(); sites = new List <ExpressionSite>(); ExpressionEvaluator expressionEvaluator = new ExpressionEvaluator(context.DocumentRootResolver); foreach (KeyValuePair <DocumentNode, List <ViewNode> > keyValuePair in this) { DocumentNode key = keyValuePair.Key; viewNodes1.Clear(); foreach (ViewNode value in keyValuePair.Value) { ViewNode parent = value.Parent; if (parent != null) { DocumentNode documentNode1 = parent.DocumentNode; if (!value.IsProperty) { int num = value.Parent.Children.IndexOf(value); expressionSite = new ExpressionSite(num); } else { expressionSite = new ExpressionSite(value.SitePropertyKey); } bool flag1 = ExpressionCache.HasInvalidAncestor(context, parent, out flag); if (!flag) { continue; } if (!flag1) { DocumentNodePath correspondingNodePath = context.ViewNodeManager.GetCorrespondingNodePath(parent); DocumentCompositeNode node = (DocumentCompositeNode)correspondingNodePath.Node; if (expressionSite.IsProperty) { item = node.Properties[expressionSite.PropertyKey]; } else if (node.Children == null) { if (expressionSite.ChildIndex < node.ConstructorArguments.Count) { documentNode = node.ConstructorArguments[expressionSite.ChildIndex]; } else { documentNode = null; } item = documentNode; } else { if (expressionSite.ChildIndex < node.Children.Count) { item1 = node.Children[expressionSite.ChildIndex]; } else { item1 = null; } item = item1; } DocumentNode documentNode2 = value.DocumentNode; bool flag2 = true; if (item != null) { if (!DocumentNodeUtilities.IsBinding(value.DocumentNode)) { flag2 = false; documentNode2 = expressionEvaluator.EvaluateExpression(correspondingNodePath, item); } else { IPropertyId propertyId = value.DocumentNode.TypeResolver.ResolveProperty(Microsoft.Expression.DesignModel.Metadata.KnownProperties.BindingElementNameProperty); if (propertyId != null) { DocumentNode item2 = ((DocumentCompositeNode)value.DocumentNode).Properties[propertyId]; if (item2 != null) { DocumentPrimitiveNode documentPrimitiveNode = item2 as DocumentPrimitiveNode; if (documentPrimitiveNode != null) { DocumentNodeStringValue documentNodeStringValue = documentPrimitiveNode.Value as DocumentNodeStringValue; if (documentNodeStringValue != null) { string str = documentNodeStringValue.Value; object obj = context.NameScope.FindName(str); if (obj != null) { ViewNode viewNode = context.InstanceDictionary.GetViewNode(obj, false); InstanceState invalid = InstanceState.Invalid; if (viewNode != null && !ExpressionCache.HasInvalidAncestor(context, viewNode, out flag)) { invalid = viewNode.InstanceState; } if (invalid != InstanceState.Invalid && (invalid.InvalidProperties == null || !invalid.InvalidProperties.Contains(viewNode.DocumentNode.NameProperty))) { documentNode2 = viewNode.DocumentNode; flag2 = false; } else if (parent.Instance is VisualBrush && expressionSite.IsProperty && Microsoft.Expression.DesignModel.Metadata.KnownProperties.VisualBrushVisualProperty.Equals(expressionSite.PropertyKey)) { BindingOperations.ClearBinding((VisualBrush)parent.Instance, VisualBrush.VisualProperty); } } } } } } } } if (key != item == (documentNode2 != null) && (documentNode2 == null || documentNode2 == key) && !flag2) { continue; } viewNodes1.Add(value); viewNodes.Add(parent); sites.Add(expressionSite); } else { viewNodes1.Add(value); } } else { viewNodes1.Add(value); } } if (viewNodes1.Count != keyValuePair.Value.Count) { this.PurgePartialEntry(keyValuePair.Value, viewNodes1); } else { documentNodes.Add(keyValuePair.Key); } } foreach (DocumentNode documentNode3 in documentNodes) { base.Remove(documentNode3); } return(viewNodes); }