private void DrawBaseInheritanceRelation()
 {
     var baseEntityTypeDesigner = Designer.Children.OfType<EntityTypeDesigner>().FirstOrDefault(etd => etd.EntityType.BusinessInstance == EntityType.BusinessInstance.BaseType);
     if (baseEntityTypeDesigner == null)
         _baseRelationContener = null;
     else
         _baseRelationContener = DrawInheritanceRelation(baseEntityTypeDesigner, this);
 }
 private RelationContener DrawInheritanceRelation(EntityTypeDesigner baseTypeDesigner, EntityTypeDesigner childTypeDesigner)
 {
     var relationContener = (from rc in Designer.Children.OfType<RelationContener>()
                            let ir = rc.Content as InheritanceRelation
                            where ir != null && ir.FromTypeDesigner == childTypeDesigner && ir.ToTypeDesigner == baseTypeDesigner
                            select rc).FirstOrDefault();
     if (relationContener != null)
         return relationContener;
     var inheritanceRelation = new InheritanceRelation(Designer, childTypeDesigner, baseTypeDesigner, () => Designer.Children.OfType<EntityTypeDesigner>().FirstOrDefault(etd => etd.EntityType.BusinessInstance == EntityType.BusinessInstance.BaseType));
     relationContener = new RelationContener(inheritanceRelation);
     Designer.Children.Add(relationContener);
     relationContener.SetBinding(Canvas.LeftProperty, new Binding { Source = inheritanceRelation, Path = new PropertyPath("CanvasLeft") });
     relationContener.SetBinding(Canvas.TopProperty, new Binding { Source = inheritanceRelation, Path = new PropertyPath("CanvasTop") });
     baseTypeDesigner.AddRelationContenerWithoutRelatedProperty(relationContener);
     childTypeDesigner.AddRelationContenerWithoutRelatedProperty(relationContener);
     return relationContener;
 }
 public void DeleteBaseInheritanceRelation()
 {
     if (_baseRelationContener != null)
     {
         Designer.Children.Remove(_baseRelationContener);
         _baseRelationContener = null;
     }
 }
 protected void AddRelationContenerWithoutRelatedProperty(RelationContener relationContener)
 {
     if (!(relationContener == null || RelationsContenerWithoutRelatedProperty.Contains(relationContener)))
     {
         RelationsContenerWithoutRelatedProperty.Add(relationContener);
         relationContener.Removed += () => RelationsContenerWithoutRelatedProperty.Remove(relationContener);
     }
 }
 protected void AddRelationContenerByRelatedProperty(UIProperty uiProperty, RelationContener relationContener)
 {
     var uiRelatedProperty = uiProperty as UIRelatedProperty;
     if (!(uiRelatedProperty == null || RelationsContenerByRelatedProperty.ContainsKey(uiRelatedProperty)))
     {
         RelationsContenerByRelatedProperty.Add(uiRelatedProperty, relationContener);
         relationContener.Removed += () => RelationsContenerByRelatedProperty.Remove(uiRelatedProperty);
     }
 }
 internal void DrawComplexPropertyRelation(TypeBaseDesigner otherTypeDesigner, UIRelatedProperty relatedProperty)
 {
     if (RelationsContenerByRelatedProperty.ContainsKey(relatedProperty) || otherTypeDesigner.RelationsContenerByRelatedProperty.ContainsKey(relatedProperty))
         return;
     var complexProperty = (ComplexProperty)relatedProperty.BusinessInstance;
     int typeDesignerItemIndex;
     var complexPropertyRelation = new ComplexPropertyRelation(Designer, this, otherTypeDesigner, GetListViewItem(complexProperty, out typeDesignerItemIndex), typeDesignerItemIndex);
     var relationContener = new RelationContener(complexPropertyRelation);
     Designer.Children.Add(relationContener);
     relationContener.SetBinding(Canvas.LeftProperty, new Binding { Source = complexPropertyRelation, Path = new PropertyPath("CanvasLeft") });
     relationContener.SetBinding(Canvas.TopProperty, new Binding { Source = complexPropertyRelation, Path = new PropertyPath("CanvasTop") });
     AddRelationContenerByRelatedProperty(UIType.Properties[complexProperty], relationContener);
     otherTypeDesigner.AddRelationContenerWithoutRelatedProperty(relationContener);
 }
 internal void DrawAssociation(TypeBaseDesigner otherTypeDesigner, NavigationProperty navigationProperty)
 {
     var csdlAssociation = navigationProperty.Association;
     int otherTypeDesignerItemIndex;
     var otherNavigationProperty = csdlAssociation.PropertiesEnd.First(np => np != navigationProperty);
     var otherListViewItem = otherTypeDesigner.GetListViewItem(otherNavigationProperty, out otherTypeDesignerItemIndex);
     int typeDesignerItemIndex;
     var typeDesignerListViewItem = GetListViewItem(navigationProperty, out typeDesignerItemIndex);
     ICSharpCode.Data.EDMDesigner.Core.UI.UserControls.Relations.Association association;
     if (csdlAssociation.PropertyEnd1 == navigationProperty)
         association = new ICSharpCode.Data.EDMDesigner.Core.UI.UserControls.Relations.Association(csdlAssociation, Designer, this, otherTypeDesigner, typeDesignerListViewItem, otherListViewItem, typeDesignerItemIndex, otherTypeDesignerItemIndex);
     else
         association = new ICSharpCode.Data.EDMDesigner.Core.UI.UserControls.Relations.Association(csdlAssociation, Designer, otherTypeDesigner, this, otherListViewItem, typeDesignerListViewItem, otherTypeDesignerItemIndex, typeDesignerItemIndex);
     var relationContener = new RelationContener(association);
     Designer.Children.Add(relationContener);
     relationContener.SetBinding(Canvas.LeftProperty, new Binding { Source = association, Path = new PropertyPath("CanvasLeft") });
     relationContener.SetBinding(Canvas.TopProperty, new Binding { Source = association, Path = new PropertyPath("CanvasTop") });
     AddRelationContenerByRelatedProperty(UIType.Properties[navigationProperty], relationContener);
     otherTypeDesigner.AddRelationContenerByRelatedProperty(otherTypeDesigner.UIType.Properties[otherNavigationProperty], relationContener);
     NotifyCollectionChangedEventHandler mappingCollectionChanged = delegate
     {
         VisualTreeHelperUtil.GetControlsDecendant<EditableTextBlock>(otherListViewItem).First().GetBindingExpression(EditableTextBlock.OpacityProperty).UpdateTarget();
         VisualTreeHelperUtil.GetControlsDecendant<EditableTextBlock>(typeDesignerListViewItem).First().GetBindingExpression(EditableTextBlock.OpacityProperty).UpdateTarget();
     };
     csdlAssociation.PropertyEnd1.Mapping.CollectionChanged += mappingCollectionChanged;
     csdlAssociation.PropertyEnd2.Mapping.CollectionChanged += mappingCollectionChanged;
 }