Freigeben über


Navigieren in und Aktualisieren von Modellen im Programmcode

Sie können Code schreiben, um Modellelemente zu erstellen und zu löschen, ihre Eigenschaften festlegen und Verbindungen zwischen Elementen zu erstellen und zu löschen.Alle Änderungen müssen innerhalb einer Transaktion vorgenommen werden.Wenn die Elemente in einem Diagramm angezeigt werden, wird das Diagramm oben „Bezeichnung“ Automatically am Ende der Transaktion festgelegt.

In diesem Thema

Eine Definition des Beispiels-DSL

Das Modell navigieren

Klasseninformationen zugreifen.

Führen Sie Änderungen innerhalb einer Transaktion aus

Erstellen von Modellelementen

Erstellen Verhältnis-Links

Löschen von Elementen

Löschen Verhältnis-Links

Die Links einer Beziehung neu anordnen

Sperren

Kopieren und Einfügen

Diagramme navigieren und Aktualisieren

Navigieren zwischen Formen und Elementen

Eigenschaften von Formen und Konnektoren

DocView und DocData

Formen und Konnektoren, Diagramme und ihre Beziehungen an Modellelemente werden in einem separaten Thema beschrieben.Weitere Informationen finden Sie unter [umleiten]Gewusst wie: Navigieren in und Aktualisieren von Diagrammen.

Eine Definition des Beispiels-DSL

Dies ist der Hauptteil der DslDefinition.dsl für die Beispiele in diesem Thema:

DSL-Definitionsdiagramm - Stammbaummodell

Dieses Modell ist eine Instanz dieses DSL:

Tudor-Stammbaummodell

Cc512845.collapse_all(de-de,VS.110).gifNamespaces und Verweise

Um den Code in diesem Thema ausführen zu können, sollten Sie verweisen:

Microsoft.VisualStudio.Modeling.Sdk.11.0.dll

Im Code wird dieser Namespace:

using Microsoft.VisualStudio.Modeling;

Wenn Sie außerdem den Code in einem anderen Projekt aus dem schreiben, in dem das DSL definiert wird, sollten Sie die Assembly importieren, die vom Dsl-Projekt erstellt wird.

Das Modell navigieren

Cc512845.collapse_all(de-de,VS.110).gifEigenschaften

Domäneneigenschaften, die Sie in der DSL-Definition definiert werden, sind Eigenschaften, die Sie im Programmcode zugreifen können:

Person henry = ...;

if (henry.BirthDate < 1500) ...

if (henry.Name.EndsWith("VIII")) ...

Wenn Sie eine Eigenschaft festlegen möchten, müssen Sie in Transaktionso vorgehen:

henry.Name = "Henry VIII";

Wenn in der DSL-Definition, ist Art einer Eigenschaft Berechnet, können Sie es nicht festlegen.Weitere Informationen finden Sie unter Berechnete und benutzerdefinierte Speichereigenschaften.

Cc512845.collapse_all(de-de,VS.110).gifBeziehungen

Domänen-Verhältnisse, die Sie in der DSL-Definition Paare definieren, werden in der Klasse eine Eigenschaft an einem Ende der Beziehung.Die Namen der Eigenschaften werden im DslDefinitions-Diagramm als Bezeichnungen auf den Rollen auf jeder Seite der Beziehung.Abhängig von der Multiplizität der Rolle, ist der Typ der Eigenschaft entweder die Klasse am anderen Ende der Beziehung oder eine Auflistung dieser Klasse.

foreach (Person child in henry.Children) { ... }

FamilyTreeModel ftree = henry.FamilyTreeModel;

Die Eigenschaften an den anderen Ende einer Beziehung sind immer miteinander.Wenn ein Link erstellt oder gelöscht wird, werden die Rolle Eigenschaft auf beiden Elemente aktualisiert.Der folgende Ausdruck ,der die Erweiterungen der System.Linq) wird immer zum ParentsHaveChildren-Verhältnis im Beispiel aus:

(Person p) => p.Children.All(child => child.Parents.Contains(p))

&& p.Parents.All(parent => parent.Children.Contains(p));

ElementLinks.Eine Beziehung wird auch durch ein Modellelement dargestellt, das einen Linkaufgerufen wird, auf dem eine Instanz von Domänen-Verhältnis-Typs ist.Ein Link hat immer ein Quellelement und das Zielelement.Das Quellelement und das Zielelement können identisch sein.

Sie können einen Link und ihre Eigenschaften zugreifen:

ParentsHaveChildren link = ParentsHaveChildren.GetLink(henry, edward);

// This is now true:

link == null || link.Parent == henry && link.Child == edward

Standardmäßig wird nicht mehr als einer Instanz einer Beziehung ermöglicht, dass sämtliche Paare von Modellelementen verknüpft werden sollen.Aber wenn in der DSL-Definition, ist das Allow Duplicates-Flag für die Beziehung den Wert True, dann könnte es mehr als einen Link, und Sie müssen GetLinksverwenden:

foreach (ParentsHaveChildren link in ParentsHaveChildren.GetLinks(henry, edward)) { ... }

Es gibt noch weitere Methoden für den Zugriff auf Links.Beispiele:

foreach (ParentsHaveChildren link in ParentsHaveChildren.GetLinksToChildren(henry)) { ... }

Ausgeblendete Rollen. Wenn in der DSL-Definition, ist Ist generierte Eigenschaftfalse für eine bestimmte Rolle, wird keine Eigenschaft generiert, die dieser Rolle zugeordnet ist.Sie können jedoch weiterhin die Links zugreifen und die Links mithilfe von Methoden der Beziehung durchlaufen:

foreach (Person p in ParentsHaveChildren.GetChildren(henry)) { ... }

Das am häufigsten verwendete Beispiel ist das PresentationViewsSubject Beziehung, das ein Modellelement verknüpft, die die Form in einem Diagramm angezeigt wird:

PresentationViewsSubject.GetPresentation(henry)[0] as PersonShape

Cc512845.collapse_all(de-de,VS.110).gifDas Element-Verzeichnis

Sie können alle Elemente im Speicher mithilfe des Verzeichnisses Element zugreifen:

store.ElementDirectory.AllElements

Es gibt auch Methoden zum Suchen von Elementen, z. B. Folgendes:

store.ElementDirectory.FindElements(Person.DomainClassId);

store.ElementDirectory.GetElement(elementId);

Klasseninformationen zugreifen.

Sie können Informationen zu den Klassen, Beziehungen und anderen Aspekten der DSL-Definition abrufen.Beispiele:

DomainClassInfo personClass = henry.GetDomainClass();

DomainPropertyInfo birthProperty =

personClass.FindDomainProperty("BirthDate")

DomainRelationshipInfo relationship =

link.GetDomainRelationship();

DomainRoleInfo sourceRole = relationship.DomainRole[0];

Die Klassen der Vorgänger von Modellelementen lauten wie folgt:

  • ModelElement:alle Elemente und Beziehungen sind ModelElements

  • ElementLink - ElementLinks sind alle Beziehungen

Führen Sie Änderungen innerhalb einer Transaktion aus

Sobald der Programmcode alles im Speicher ändert, muss er innerhalb einer Transaktion.Dies gilt für alle Modellelemente, Beziehungen, Formen, Diagramme und ihre Eigenschaften zu.Weitere Informationen finden Sie unter Transaction.

Die bequemste Methode für die Verwaltung einer Transaktion mit einer using-Anweisung, die in einer try...catch-Anweisung eingeschlossen werden:

Store store; ...
try
{
  using (Transaction transaction =
    store.TransactionManager.BeginTransaction("update model"))
    // Outermost transaction must always have a name.
  {
    // Make several changes in Store:
    Person p = new Person(store);
    p.FamilyTreeModel = familyTree;
    p.Name = "Edward VI";
    // end of changes to Store

    transaction.Commit(); // Don't forget this!
  } // transaction disposed here
}
catch (Exception ex)
{
  // If an exception occurs, the Store will be 
  // rolled back to its previous state.
}

Sie können eine beliebige Anzahl von Änderungen innerhalb einer Transaktion erstellen.Sie können neue Transaktionen innerhalb einer aktiven Transaktion öffnen.

Um die permanente Änderung vorzunehmen, sollten Sie Commit die Transaktion bevor sie wieder zugänglich gemacht wird.Wenn eine Ausnahme auftritt, die nicht innerhalb der Transaktion abgefangen wird, wird der Speicher auf seinen Zustand vor den Änderungen zurückgesetzt.

Erstellen von Modellelementen

Dieses Beispiel fügt ein Element einem vorhandenen Modell hinzufügen:

FamilyTreeModel familyTree = ...; // The root of the model.       
using (Transaction t =
    familyTree.Store.TransactionManager
    .BeginTransaction("update model"))
{
  // Create a new model element 
  // in the same partition as the model root:
  Person edward = new Person(familyTree.Partition);
  // Set its embedding relationship:
  edward.FamilyTreeModel = familyTree;
          // same as: familyTree.People.Add(edward);
  // Set its properties:
  edward.Name = "Edward VII";
  t.Commit(); // Don't forget this!
}

Dieses Beispiel verdeutlicht diese Kernpunkte zum Erstellen eines Elements:

  • Erstellen Sie das neue Element in einer bestimmten Partition des Speichers.Für Modellelemente und Beziehungen jedoch nicht Forms ist normalerweise die Standardpartition.

  • Stellen Sie sich das Ziel eines Einbettungs-Verhältnis.Im DslDefinition dieses Beispiels muss jede Person das Ziel des Einbettungs-Verhältnisses FamilyTreeHasPeople sein.Um dies zu erreichen, können Sie entweder die Eigenschaft FamilyTreeModel Rolle des Objekts Person festlegen oder die Person Personen Rolle Eigenschaft des FamilyTreeModel-Objekts hinzu.

  • Legen Sie die Eigenschaften des neuen Elements fest, insbesondere für das die Eigenschaft IsName im DslDefinition true ist.Dieses Flag markiert die Eigenschaft dient das Element innerhalb seines Besitzers eindeutig zu identifizieren.In diesem Fall hat die Namenseigenschaft dieses Flag.

  • In diesem DSL-Definition DSL muss in den Speicher geladen worden sein.Wenn Sie eine Erweiterung z. B. einen Menübefehl schreiben, ist dies i. d. R. bereits erfüllt.In anderen Fällen können Sie das Modell explizit in den Speicher laden, oder verwenden Sie ModelBus , um es zu laden.Weitere Informationen finden Sie unter Gewusst wie: Öffnen eines Modells aus einer Datei im Programmcode.

Wenn Sie ein Element auf diese Weise erstellen, wird automatisch eine Form erstellt (wenn das DSL ein Diagramm hat).Sie wird in einem automatisch zugewiesenen Position, mit standardmäßigen Form, Farbe und anderen Funktionen.Wenn Sie steuern möchten, wie und wo der zugeordnete Formular angezeigt wird, gehen Sie Ein Element und seine Form erstellen.

Es gibt zwei Beziehungen, die in der Definition des Beispiels DSL definiert sind.Jede Beziehung definiert eine Rolle Eigenschaft der Klasse an beiden Enden der Beziehung.

Es gibt drei Möglichkeiten, in denen Sie eine Instanz einer Beziehung erstellen können.Jede dieser drei Methoden hat denselben Effekt:

  • Legen Sie die Eigenschaft Players Rolle der Quelle fest.Beispiele:

    • familyTree.People.Add(edward);

    • edward.Parents.Add(henry);

  • Legen Sie die Eigenschaften der Zielrolle Players fest.Beispiele:

    • edward.familyTreeModel = familyTree;

      Die Multiplizität dieser Rolle ist 1..1. Daher weisen den Wert zu.

    • henry.Children.Add(edward);

      Die Multiplizität 0..*dieser Rolle ist. Fügen wir der Auflistung hinzu.

  • Erstellen Sie eine Instanz der Beziehung explizit.Beispiele:

    • FamilyTreeHasPeople edwardLink = new FamilyTreeHasPeople(familyTreeModel, edward);

    • ParentsHaveChildren edwardHenryLink = new ParentsHaveChildren(henry, edward);

Die letzte Methode ist nützlich, wenn Sie die Eigenschaften des Verhältnisses selbst festlegen möchten.

Wenn Sie ein Element auf diese Weise erstellen, wird ein Konnektor im Diagramm automatisch erstellt, aber er enthält eine standardmäßige Form, Farbe und weitere Funktionen.Um zu steuern, wie der zugehörige Konnektor erstellt wird, finden Sie unter Ein Element und seine Form erstellen.

Löschen von Elementen

Löschen Sie ein Element, indem Sie Delete()aufrufen:

henry.Delete();

Dieser Vorgang löscht auch:

  • Verhältnis-Links in und aus dem Element.Zum Beispiel enthält edward.Parents nicht mehr henry.

  • Elemente an den Rollen, für die das PropagatesDelete-Flag auf true festgelegt ist.Beispielsweise wird die Form, mit der das Element anzeigt, gelöscht.

Standardmäßig verfügt jedes Einbettungs-Verhältnis PropagatesDelete true an der Zielrolle.Beim Löschen henryfamilyTree, aber nicht gelöscht würde familyTree.Delete() alle Personslöschen.Weitere Informationen finden Sie unter Anpassen des Löschverhaltens.

Standardmäßig ist PropagatesDelete nicht für die Rollen von Bezugs-Verhältnissen true.

Sie können die Löschung Weitergaben bestimmte Regeln verursachen, wegzulassen, wenn Sie ein Objekt löschen.Dies ist hilfreich, wenn Sie ein Element für andere ersetzen.Sie geben die GUID einer oder mehreren Rollen angegeben, für die keine Löschvorgänge weitergegeben werden soll.Die GUID kann von der Beziehungsklasse abgerufen werden:

henry.Delete(ParentsHaveChildren.SourceDomainRoleId);

(Dieses bestimmte Beispiel würde keine Auswirkungen haben, da PropagatesDeletefalse für die Rollen des ParentsHaveChildren Beziehung ist.)

In einigen Fällen wird durch das Vorhandensein einer Sperre löschen, entweder auf dem Element oder für ein Element verhindert, die durch Weitergabe gelöscht wird.Sie können element.CanDelete() verwenden, um sicherzustellen, dass das Element gelöscht werden kann.

Sie können einen Verhältnis-Link löschen, indem Sie ein Element einer Rolle Eigenschaft entfernen:

henry.Children.Remove(edward); // or:

edward.Parents.Remove(henry); // or:

Sie können den Link auch explizit deaktivieren:

edwardHenryLink.Delete();

Diese drei Methoden besitzen alle die gleiche Wirkung.Sie müssen nur einen von ihnen verwenden.

Wenn die Rolle 0..1 oder 1..1 Multiplizität verfügt, können Sie sie auf nulloder auf einen anderen Wert festlegen:

//oderedward.FamilyTreeModel = null; :

edward.FamilyTreeModel = anotherFamilyTree;

Die Links eines bestimmten Beziehung, in der Ursprungs- oder an einem bestimmten Modellelement ausgelegt sind, haben eine bestimmte Folge.Sie werden in der Reihenfolge, in der sie hinzugefügt wurden.Diese Anweisung führt z. B. immer die untergeordneten Elemente in derselben Reihenfolge:

foreach (Person child in henry.Children) ...

Sie können die Reihenfolge der Links ändern:

ParentsHaveChildren link = GetLink(henry,edward);

ParentsHaveChildren nextLink = GetLink(henry, elizabeth);

DomainRoleInfo role =

link.GetDomainRelationship().DomainRoles[0];

link.MoveBefore(role, nextLink);

Sperren

Die Änderungen können durch eine Sperre verhindert werden.Sperrt kann für einzelne Elemente auf Partitionen und im Speicher festgelegt werden.Wenn alle Ebenen eine Sperre aufweist, die die Art der Änderung verhindert, die Sie ausführen möchten, wird eine Ausnahme ausgelöst, wenn Sie sie ausführen.Sie können ermitteln, ob Sperren festgelegt werden, indem Sie Element verwenden. GetLocks(), das eine Erweiterungsmethode ist, die in Immutabilitydefiniert ist.

Weitere Informationen finden Sie unter Definieren einer Sperrrichtlinie zum Erstellen von schreibgeschützten Segmenten.

Kopieren und Einfügen

Sie können Elemente oder Elementgruppen zu IDataObjectkopieren:

Person person = personShape.ModelElement as Person;
Person adopter = adopterShape.ModelElement as Person;
IDataObject data = new DataObject();
personShape.Diagram.ElementOperations
      .Copy(data, person.Children.ToList<ModelElement>());

Die Elemente werden als serialisierte Element-Gruppe gespeichert.

Sie können Elemente aus einem IDataObject in ein Modell zusammenführen:

using (Transaction t = targetDiagram.Store.
        TransactionManager.BeginTransaction("paste"))
{
  adopterShape.Diagram.ElementOperations.Merge(adopter, data);
}

Merge () kann entweder PresentationElement oder ModelElementakzeptieren.Wenn Sie diesem PresentationElementgeben, können Sie eine Position im Zieldiagramm als dritter Parameter ebenfalls angegeben wird.

Diagramme navigieren und Aktualisieren

In einem DSL ist das Domänen modellelement, das ein Konzept wie Person oder Lied darstellt, getrennt von dem Format, das darstellt, was Sie im Diagramm angezeigt.Das Domänen modellelement speichert die wichtigen Eigenschaften und Beziehungen der Concepts.Das im Element speichert die Größe, Position und Farbe der Ansicht des Objekts auf dem Diagramm und das Lay-out der Komponenten.

Cc512845.collapse_all(de-de,VS.110).gifPräsentations-Elemente

Klassendiagramm für grundlegende Form- und Elementtypen

In der DSL-Definition erstellt jedes Element, das Sie eine Klasse, die von einer der folgenden standardmäßigen Klassen abgeleitet ist.

Die Art des Elements

Basisklasse

Domänenklasse

ModelElement

Domänen-Verhältnis

ElementLink

Form

NodeShape

Konnektor

BinaryLinkShape

Diagramm

Diagram

Ein Element in einem Diagramm stellt normalerweise ein Modellelement dar.In der Regel (aber nicht immer), stellt eine NodeShape Domänen klasseninstanz dar, und BinaryLinkShape stellt eine Domänen-Verhältnis-Instanz dar.Das PresentationViewsSubject Beziehung verknüpft eine Knoten- oder Link Form auf das Modellelement, das sie darstellt.

Jede Knoten- oder Link Form gehört zu einem Diagramm.Eine binäre Link Form umfasst zwei Knoten modellieren.

Forms können in zwei Formen untergeordnete Gruppen verfügen.Eine Form in festgelegten NestedChildShapes wird im umgebenden Rechteck des übergeordneten Elements begrenzt.Eine Form in der RelativeChildShapes Liste kann sich außerhalb der Grenzen des übergeordneten Elements außerhalb oder teilweise angezeigt werden – beispielsweise eine Bezeichnung oder einen Anschluss.Ein Diagramm ist kein RelativeChildShapes und kein Parent.

Cc512845.collapse_all(de-de,VS.110).gifNavigieren zwischen Formen und Elementen

Domänen modellelemente und Formelemente werden vom PresentationViewsSubject Beziehung verknüpft.

// using Microsoft.VisualStudio.Modeling;
// using Microsoft.VisualStudio.Modeling.Diagrams;
// using System.Linq;
Person henry = ...;
PersonShape henryShape = 
  PresentationViewsSubject.GetPresentation(henry)
    .FirstOrDefault() as PersonShape;

Das gleiche Beziehung verknüpften Beziehungen mit den Verbindungen im Diagramm:

Descendants link = Descendants.GetLink(henry, edward);
DescendantConnector dc =
   PresentationViewsSubject.GetPresentation(link)
     .FirstOrDefault() as DescendantConnector;
// dc.FromShape == henryShape && dc.ToShape == edwardShape

Diese Beziehung verknüpft ebenfalls den Stamm des Modells in das Diagramm:

FamilyTreeDiagram diagram = 
   PresentationViewsSubject.GetPresentation(familyTree)
      .FirstOrDefault() as FamilyTreeDiagram;

Um das Modellelement abrufen, dargestellt durch eine Form, verwenden Sie:

henryShape.ModelElement as Person

diagram.ModelElement as FamilyTreeModel

Cc512845.collapse_all(de-de,VS.110).gifZum Durchsuchen des Diagramms

Im Allgemeinen ist es nicht empfehlenswert, zum Navigieren zwischen Formen und Konnektoren im Diagramm angezeigt.Es wird empfohlen, die Beziehungen im Modell zu navigieren und bewegt die Formen und Konnektoren zwischen nur, wenn zu arbeiten, muss die Darstellung des Diagramms.Diese Methoden aufgelistet Konnektoren Formen an beiden Enden:

personShape.FromRoleLinkShapes, personShape.ToRoleLinkShapes

connector.FromShape, connector.ToShape

Viele Formen sind Zusammensetzungen folgt. bleiben sie eine übergeordnete und eine oder mehrere Ebenen untergeordneter Elemente.Formen, die relativ zu einer anderen Form positioniert sind, werden seine untergeordneten Elemente.Wenn die übergeordnete Form wechselt, ziehen die untergeordneten Elemente mit ihr um.

Relative untergeordnete Elemente können außerhalb des umgebenden Feldes der übergeordneten Formular angezeigt werden.Geschachtelte untergeordnete Elemente werden ausschließlich innerhalb der Grenzen des übergeordneten Elements.

Abrufen der oberste Satz von Formen in einem Diagramm, verwenden Sie:

Diagram.NestedChildShapes

Die vorherige Klassen von Formen und Konnektoren sind:

ModelElement

-- PresentationElement

-- ShapeElement

----- NodeShape

------- Diagram

------- TheShape

----- LinkShape

------- BinaryLinkShape

--------- TheConnector

Cc512845.collapse_all(de-de,VS.110).gifEigenschaften von Formen und Konnektoren

In den meisten Fällen ist es nicht notwendig, explizite Ändern von Formen vor.Wenn Sie die Modellelemente geändert haben, „Regeln“ oben beheben Sie aktualisieren die Formen und Konnektoren.Weitere Informationen finden Sie unter Reagieren auf und Propagieren von Änderungen.

Allerdings ist es hilfreich, einige explizite Ändern von Formen in den Eigenschaften vorzunehmen, die unabhängig von der standardmäßigen sind.Beispielsweise könnten Sie diese Eigenschaften ändern:

  • Size - Bestimmt die Höhe und Breite der Form.

  • Location - Position relativ zur übergeordneten Formular oder dem Diagramm

  • StyleSet - Der Satz von Stiften und Pinseln für das Zeichnen der Form oder des Konnektors

  • Hide - macht die Form nicht sichtbar

  • Show - Hide()nach sichtbar macht die Form

Cc512845.collapse_all(de-de,VS.110).gifEin Element und seine Form erstellen

Wenn Sie ein Element erstellen und es in die Struktur von Einbettungs-Verhältnissen verknüpfen, ist eine Form automatisch erstellt und ihr zugeordneten zugeordnet.Dies ist für die „Fixup“ Regeln, die am Ende der Transaktion ausführen.Allerdings wird die Form in einem automatisch-zugewiesenen Position und die Form, Farbe und andere Funktionen haben Standardwerte.Um zu steuern, wie die Form erstellt wurde, können Sie die Funktion zum Zusammenführen verwenden.Sie müssen zuerst die Elemente hinzufügen, die Sie in ein ElementGroup hinzufügen möchten, und führen Sie dann die Gruppe in das Diagramm.

Diese Methode führt Folgendes durch:

  • Legt den Namen fest, wenn Sie eine Eigenschaft als Elementname zugewiesen haben.

  • Achtet alle diese Element-Merge-Direktive in der angegebenen DSL-Definition.

Dieses Beispiel erstellt eine Form in der Mausposition, wenn der Benutzer auf das Diagramm doppelklickt.In der DSL-Definition für dieses Beispiel ist die FillColor-Eigenschaft von ExampleShape verfügbar geworden.

  using Microsoft.VisualStudio.Modeling;
  using Microsoft.VisualStudio.Modeling.Diagrams;
  partial class MyDiagram
  {
    public override void OnDoubleClick(DiagramPointEventArgs e)
    {
      base.OnDoubleClick(e);

      using (Transaction t = this.Store.TransactionManager
          .BeginTransaction("double click"))
      {
        ExampleElement element = new ExampleElement(this.Store);
        ElementGroup group = new ElementGroup(element);
         
        { // To use a shape of a default size and color, omit this block.
          ExampleShape shape = new ExampleShape(this.Partition);
          shape.ModelElement = element;
          shape.AbsoluteBounds = new RectangleD(0, 0, 1.5, 1.0);
          shape.FillColor = System.Drawing.Color.Azure;
          group.Add(shape);
        }

        this.ElementOperations.MergeElementGroupPrototype(
          this,
          group.CreatePrototype(),
          PointD.ToPointF(e.MousePosition));
        t.Commit();
      }
    }
  }

Wenn Sie mehr als eine Form bereitstellen, legen Sie ihre relativen Positionen in AbsoluteBoundsfest.

Sie können die Farbe und anderen verfügbar gemachten Eigenschaften von Verbindungen mit dieser Methode festlegen.

Cc512845.collapse_all(de-de,VS.110).gifVerwendungs-Transaktionen

Formen und Konnektoren Untertypen von ModelElement und Diagramme sind aktiv im Speicher.Sie müssen Änderungen an ihnen daher nur innerhalb einer Transaktion vornehmen.Weitere Informationen finden Sie unter Gewusst wie: Verwenden von Transaktionen zum Aktualisieren des Modells.

Dokumenten-Ansichts-und Dokumenten-Bezugspunkte

Klassendiagramm für Standarddiagrammtypen

Speicher-Partitionen

Wenn ein Modell geladen wird, wird das zugehörige Diagramms gleichzeitig geladen.In der Regel wird das Modell in Store.DefaultPartition geladen, und der Diagramminhalt wird in eine andere Partition geladen.Normalerweise wird der Inhalt jeder Partition in eine separate Datei geladen und gespeichert.

Siehe auch

Referenz

ModelElement

Konzepte

Validierung in einer domänenspezifischen Sprache

Gewusst wie: Verwenden von Transaktionen zum Aktualisieren des Modells

Integrieren von Modellen mit Visual Studio-ModelBus

Weitere Ressourcen

Generieren von Code für eine domänenspezifische Sprache

Reagieren auf und Propagieren von Änderungen