Udostępnij za pośrednictwem


Tworzenie języka specyficznego dla domeny opartego na formularzach systemu Windows

Windows Forms można użyć, aby wyświetlić stan model języka specyficznego dla domeny (DSL), a nie za pomocą diagramu DSL.W tym temacie omówiono wiązanie DSL formularz systemu Windows, za pomocą Visual Studio wizualizacji i modelowania SDK.

Wystąpienie DSL wyświetlono formularza interfejsu użytkownika systemu Windows i Eksplorator modelu.

DSL-Wpf-2

Tworzenie Windows Forms DSL

Projektant WinForm minimalne DSL szablon tworzy minimalne DSL, który można dostosować do swoich potrzeb.

Aby utworzyć minimalny DSL WinForm

  1. Tworzenie DSL z Projektant WinForm minimalne szablonu.

    W tym instruktażu są przyjąć następujące nazwy:

    Nazwa rozwiązania i DSL

    FarmApp

    Obszar nazw

    Company.FarmApp

  2. Poeksperymentuj z początkowej przykład, że szablon zawiera:

    1. Przekształcić wszystkie szablony.

    2. Tworzenie i uruchamianie próbki (CTRL + F5).

    3. Eksperymentalne wystąpienie programu Visual Studio, otwórz Sample plików w projekcie debugowania.

      Należy zauważyć, że jest wyświetlany w formancie Windows Forms.

      Można również zobaczyć elementy wyświetlane w Eksploratorze modelu.

      Dodać pewne elementy w formularzu lub Eksploratora i Zauważ, że pojawiają się w innych wyświetlania.

W głównym wystąpienie Visual Studio, zawiadomienie o rozwiązanie DSL punkty:

  • DslDefinition.dslzawiera elementy nie diagramu.Wynika to z diagramów DSL będzie nie służy do wyświetlania modeli wystąpienie tego DSL.Zamiast tego będzie związać formularz systemu Windows do modelu i elementy w formularzu będą wyświetlane w modelu.

  • W uzupełnieniu do Dsl i DslPackage projektów, rozwiązanie zawiera trzeci projekt o nazwie UI.UI projekt zawiera definicję kontroli Windows Forms. DslPackagedepends on UI, and UI depends on Dsl.

  • W DslPackage projektu, UI\DocView.cs zawiera kod, który wyświetla formant Windows Forms, który jest zdefiniowany w UI projektu.

  • UI Projekt zawiera przykładowe pracy formantu formularza związanego z DSL.Jednakże to nie będzie działać po zmianie definicji DSL.UI Projekt zawiera:

    • Klasa Windows Forms o nazwie ModelViewControl.

    • Plik o nazwie DataBinding.cs zawiera dodatkowe definicji częściowej, z ModelViewControl.Aby wyświetlić jego zawartość w Solution Explorer, otwórz menu skrótów dla pliku i wybierz polecenie Widok Kod.

Temat projektu interfejsu użytkownika

Podczas aktualizowania pliku definicji DSL, aby zdefiniować własne DSL, trzeba będzie zaktualizować formant w UI projektu, aby wyświetlić DSL.W przeciwieństwie do Dsl i DslPackage projektów, próbki UI projekt nie jest generowany na podstawie DslDefinitionl.dsl.Możesz dodać pliki .tt do generowania kodu, jeśli chcesz, chociaż nie jest objęty w tym instruktażu.

Aktualizowanie definicji DSL

Następujące definicje DSL jest używana w tym instruktażu.

DSL-Wpf-1

Aby zaktualizować definicję DSL

  1. Otworzyć DslDefinition.dsl Projektant DSL.

  2. Usuwanie ExampleElement

  3. Zmień nazwę ExampleModel klasy domeny do farmy.

    Nadaj właściwości dodatkowe domeny o nazwie rozmiar typu Int32, i IsOrganic typu typu Boolean.

    [!UWAGA]

    Usuń klasę domeny katalogu głównego, a następnie utworzyć nowy katalog główny, należy zresetować właściwości klasy głównego edytora.W DSL Explorer, wybierz opcję Edytor.Następnie w oknie właściwości zestaw Główny klasy do farmy.

  4. Użycie Klasy domeny o nazwie narzędzie do tworzenia następujących klas domeny:

    • Pole -dać, to właściwość dodatkowej domeny o nazwie rozmiar.

    • Zwierząt -Ustaw właściwości w oknie Modyfikator dziedziczenia do streszczenie.

  5. Użycie Klasy domeny narzędzie do tworzenia następujących klas:

    • Owce

    • Kozy

  6. Użycie dziedziczenia narzędzie, aby koza i owiec dziedziczą z zwierząt.

  7. Użycie Embedding narzędzie, aby osadzić pola i zwierząt pod farmy.

  8. Może chcesz uporządkować na diagramie.Zmniejszenie liczby zduplikowanych elementów, użyj Przynieść poddrzewa tutaj polecenia menu skrótów elementów typu liść.

  9. Przekształcić wszystkie szablony na pasku narzędziowym panelu Solution Explorer.

  10. Budowanie Dsl projektu.

    [!UWAGA]

    Na tym etapie inne projekty nie utworzy się bez błędów.Jednak chcemy budowania projektu Dsl, tak aby jego zestaw jest dostępny do Kreatora źródła danych.

Aktualizowanie projektu interfejsu użytkownika

Teraz można utworzyć nowy formant użytkownika, który wyświetli informacje, które są przechowywane w modelu DSL.Najprostszym sposobem połączenia formantu użytkownika modelu jest poprzez powiązania danych.Typ zasilacza o nazwie powiązania danych ModelingBindingSource jest specjalnie przeznaczony do DSLs połączyć się z interfejsów nie VMSDK.

Aby zdefiniować DSL model jako źródła danych

  1. Na danych menu, wybierz opcję Pokaż źródła danych.

    Źródła danych zostanie otwarte okno.

    Wybierz dodać nowe źródło danych.Kreatora konfiguracji źródła danych otwiera.

  2. Wybierz obiektu, Dalej.

    Rozwiń węzeł Dsl, Company.FarmAppi wybierz gospodarstwa, który jest klasą modelu.Wybierz wykończenie.

    W oknie Solution Explorer UI zawiera teraz projektuProperties\DataSources\Farm.datasource

    Właściwości i relacji klasy modelu są wyświetlane w oknie źródła danych.

    DslWpf-3

Aby połączyć model formularza

  1. W UI projektu, usunąć wszystkie istniejące pliki CS.

  2. Dodaj nowy Kontrola użytkownika plik o nazwie FarmControl do UI projektu.

  3. W Źródła danych okno, z menu rozwijanego w gospodarstwa, wybierz opcję Szczegóły.

    Pozostaw domyślne ustawienia innych właściwości.

  4. Otwórz FarmControl.cs w widoku Projekt.

    Przeciągnij farmy na FarmControl okna źródeł danych.

    Zestaw formantów wydaje, jeden dla każdej właściwości.Właściwości relacji nie generują formantów.

  5. Usuwanie farmBindingNavigator.To jest automatycznie generowane w FarmControl projektanta, ale nie jest to przydatne dla tej aplikacji.

  6. Za pomocą przybornika, Utwórz dwa wystąpienia DataGridViewi nazwij je AnimalGridView i FieldGridView.

    [!UWAGA]

    Krok alternatywny jest przeciągać elementy zwierząt i pola w oknie źródła danych w formancie.Ta akcja tworzy automatycznie siatki danych i powiązań między widoku siatki i źródła danych.Jednak to powiązanie nie działa poprawnie dla DSLs.Dlatego też lepiej do tworzenia siatki danych i wiązania ręcznie.

  7. Jeśli przybornik nie zawiera ModelingBindingSource narzędzie, należy go dodać.W menu skrótów z danych tab, wybrać Wybierz elementy.W Choose Toolbox Items okno dialogowe, wybierz ModelingBindingSource z Karta.NET Framework.

  8. Za pomocą przybornika, Utwórz dwa wystąpienia ModelingBindingSourcei nazwij je AnimalBinding i FieldBinding.

  9. Zestaw źródło danych właściwość każdego ModelingBindingSource do farmBindingSource.

    Zestaw DataMember właściwość, aby zwierzęta lub pola.

  10. Zestaw źródło danych właściwości AnimalGridView do AnimalBindingi FieldGridView do FieldBinding.

  11. Dostosowywanie układu sterowania farmy do smaku.

ModelingBindingSource jest adaptera, który wykonuje kilka funkcji, które są specyficzne dla DSLs:

  • Aktualizacje zawija się w transakcji magazynu VMSDK.

    Na przykład gdy użytkownik usuwa wiersz z danych widoku siatki, regularne wiązania spowodowałoby wyjątek transakcji.

  • Zapewnia, że gdy użytkownik zaznacza wiersz, w oknie właściwości wyświetla właściwości odpowiedni element modelu, a nie wiersz siatki danych.

Schemat łącza między źródłami danych i widokach.

DslWpf4

Aby wykonać powiązania do DSL

  1. Dodaj następujący kod w pliku oddzielnym kod w UI projektu:

    using System.ComponentModel;
    using Microsoft.VisualStudio.Modeling;
    using Microsoft.VisualStudio.Modeling.Design;
    
    namespace Company.FarmApp
    {
      partial class FarmControl
      {
        public IContainer Components { get { return components; } }
    
        /// <summary>Binds the WinForms data source to the DSL model.
        /// </summary>
        /// <param name="nodelRoot">The root element of the model.</param>
        public void DataBind(ModelElement modelRoot)
        {
          WinFormsDataBindingHelper.PreInitializeDataSources(this);
          this.farmBindingSource.DataSource = modelRoot;
          WinFormsDataBindingHelper.InitializeDataSources(this);
        }
      }
    }
    
  2. W DslPackage projektu, Edycja DslPackage\DocView.tt aktualizacji definicji następujących zmiennych:

    string viewControlTypeName = "FarmControl";
    

Testowanie DSL

Rozwiązanie DSL można teraz skompilować i uruchomić, chociaż warto dodać dalsze udoskonalenia później.

Aby przetestować DSL

  1. Tworzenie i uruchamianie rozwiązanie.

  2. Eksperymentalne wystąpienie programu Visual Studio, otwórz próbki pliku.

  3. W FarmApp Explorer, otwórz menu skrótów na farmy główny węzeł, a następnie wybierz polecenie Dodać nowe koza.

    Goat1 pojawia się w zwierzęta widok.

    Informacje dotyczące przestrogiPrzestroga

    Należy użyć menu skrótów na farmy węzła, nie zwierzęta węzła.

  4. Wybierz farmy katalogu głównego węzła i wyświetlić jego właściwości.

    W widoku Formularz, należy zmienić Nazwa lub rozmiar gospodarstwa.

    Kiedy przejdziesz do innych każdego pola w formularzu odpowiednie zmiany właściwości w oknie dialogowym właściwości.

Zwiększanie DSL

Aby natychmiast zaktualizować właściwości

  1. W widoku Projekt FarmControl.cs zaznacz pole proste, takie jak nazwa, rozmiar lub IsOrganic.

  2. W oknie właściwości rozwiń powiązania danych i otworzyć (zaawansowane).

    W Formatowanie i zaawansowane powiązanie okno dialogowe, w obszarze Tryb aktualizacji źródła danych, wybierz opcję OnPropertyChanged.

  3. Tworzenie i uruchamianie rozwiązanie.

    Sprawdź, czy po zmianie zawartości pola, odpowiednia właściwość natychmiast zmiany modelu farmy.

Aby zapewnić dodawanie przycisków

  1. W widoku Projekt FarmControl.cs Użyj przybornika, aby utworzyć przycisk na formularzu.

    Edytuj nazwę i tekst przycisku, na przykład, aby Owiec nowych.

  2. Otwórz kodu przycisku (na przykład przez dwukrotne kliknięcie).

    Edytuj następująco:

        private void NewSheepButton_Click(object sender, EventArgs e)
        {
          using (Transaction t = farm.Store.TransactionManager.BeginTransaction("Add sheep"))
          {
            elementOperations.MergeElementGroup(farm,
              new ElementGroup(new Sheep(farm.Partition)));
            t.Commit();
          }
        }
    
        // The following code is shared with other add buttons:
        private ElementOperations operationsCache = null;
        private ElementOperations elementOperations
        {
          get
          {
            if (operationsCache == null)
            {
              operationsCache = new ElementOperations(farm.Store, farm.Partition);
            }
            return operationsCache;
          }
        }
        private Farm farm
        {
          get { return this.farmBindingSource.DataSource as Farm; }
        }
    

    Należy również wstawić następującej dyrektywy:

    using Microsoft.VisualStudio.Modeling;
    
  3. Dodać podobne przyciski pól i kóz.

  4. Tworzenie i uruchamianie rozwiązanie.

  5. Zweryfikuj, że nowy przycisk dodaje element.Nowy element powinien pojawić się w Eksploratorze FarmApp i w widoku siatki odpowiednie dane.

    Można edytować nazwę elementu w widoku siatki danych.Można również usunąć go stamtąd.

DSL-Wpf-2

O kod, aby dodać element

Przyciski nowy element następujący kod alternatywny jest nieco prostsze.

    private void NewSheepButton_Click(object sender, EventArgs e)
    {
      using (Transaction t = farm.Store.TransactionManager.BeginTransaction("Add sheep"))
      {
        farm.Animals.Add(new Sheep(farm.Partition)); ;
        t.Commit();
      }
    }

Jednakże ten kod nie ustawia domyślnej nazwy dla nowego elementu.To nie można uruchomić dostosowaną korespondencji seryjnej, która może być zdefiniowane w Elementu korespondencji seryjnej dyrektyw DSL, i może być zdefiniowany kodu niestandardowego w korespondencji seryjnej nie działa.

Dlatego zaleca się używanie ElementOperations do tworzenia nowych elementów.Aby uzyskać więcej informacji, zobacz Dostosowywanie tworzenia i przesuwania elementów.

Zobacz też

Koncepcje

Porady: definiowanie języka właściwego dla domeny

Modelowanie SDK dla Visual Studio — języki specyficzne dla domeny

Inne zasoby

Pisanie kodu pod kątem dostosowywania języka specyficznego dla domeny