private void CreateSubGraph(EntityEx group)
        {
            ISubGraphModel sgmodel = myDiagram.Model as ISubGraphModel;

            if (sgmodel == null)
            {
                return;
            }

            var nodes = MainDataCollection;

            if (group == null)
            {
                var rootCollection = nodes.Where(n => String.IsNullOrEmpty(n.RootName));
                foreach (EntityEx entity in rootCollection)
                {
                    entity.Color      = String.Format("#{0:X}{1:X}{2:X}", 80 + rand.Next(100), 80 + rand.Next(100), 80 + rand.Next(100));
                    entity.IsSubGraph = true;
                    if (group != null)
                    {
                        entity.SubGraphKey = group.Key;
                    }
                    sgmodel.AddNode(entity);
                }

                //    GraphLinksModel<EntityEx, String, String, Relationship> model = myDiagram.Model as GraphLinksModel<EntityEx, String, String, Relationship>;
                //    model.LinksSource = new ObservableCollection<Relationship>() {
                //    new Relationship() { From="SVMEmailSignatureType", To="ASMComplexSystemType", Text="0..N", ToText="1" }
                //};

                GraphLinksModel <EntityEx, String, String, Relationship> model = myDiagram.Model as GraphLinksModel <EntityEx, String, String, Relationship>;
                model.LinksSource = mainRelationCollection;
            }
            else
            {
                var rootCollection = nodes.Where(n => n.RootName.Equals(group.Key));
                foreach (EntityEx entity in rootCollection)
                {
                    entity.Color      = String.Format("#{0:X}{1:X}{2:X}", 80 + rand.Next(100), 80 + rand.Next(100), 80 + rand.Next(100));
                    entity.IsSubGraph = false;
                    if (group != null)
                    {
                        entity.SubGraphKey = group.Key;
                    }
                    sgmodel.AddNode(entity);
                }
            }
            myDiagram.InitialCenteredNodeData = sgmodel.NodesSource.OfType <EntityEx>().First();
        }
        private void CollapseExpandButton_Click(object sender, RoutedEventArgs e)
        {
            Button button = (Button)sender;
            Group  sg     = Part.FindAncestor <Group>(button);

            if (sg != null)
            {
                EntityEx subgraphdata = (EntityEx)sg.Data;
                if (!subgraphdata.IsSubGraph)
                {
                    return;
                }
                if (!subgraphdata.EverExpanded && !sg.IsExpandedSubGraph)
                {
                    subgraphdata.EverExpanded = true;
                    CreateSubGraph(subgraphdata);
                }

                sg.IsExpandedSubGraph = !sg.IsExpandedSubGraph;
                myDiagram.Panel.CenterPart(sg);
            }
        }