共用方式為


建立 Windows Form 架構之網域指定的語言

您可以使用Windows Form顯示Domain-Specific Language (DSL)模型的狀態,而不是使用DSL圖表。 這個主題可以為您解說繫結Windows Form加入DSL,使用 Visual Studio Visualization and Modeling SDK。

DSL的執行個體,顯示Windows Form和UI模型總管。

DSL-Wpf-2

建立Windows Form DSL

[最小WinForm設計工具] DSL範本建立您可以修改以符合需求的最小DSL。

建立最小的WinForms DSL

  1. 若要從 [最小WinForm設計工具] 範本建立DSL。

    在這個逐步解說中,假設下列名稱:

    方案和DSL名稱

    FarmApp

    命名空間

    Company.FarmApp

  2. 使用樣板提供的初始範例進行實驗:

    1. 轉換所有範本。

    2. 建置並執行這個範例([CTRL+F5])。

    3. 在Visual Studio的實驗執行個體中, Sample 開啟在偵錯專案的檔案。

      請注意在Windows Form控制項中顯示。

      您也可以在檔案總管中顯示的模型項目。

      在表單中加入一些項目或檔案總管,並注意它們出現在另一個顯示。

在主要執行個體, Visual Studio請注意如需DSL方案的重點:

  • DslDefinition.dsl 不包含圖表項目。 這是因為,您不會使用DSL圖表檢視DSL模型執行個體。 因此,您必須繫結至Windows Form加入至模型,,然後在表單的項目將會顯示這個模型。

  • 除了 Dsl 和 DslPackage 專案之外,方案包含第三個專案 UI. UI] 名稱專案包含Windows Form控制項的定義。 DslPackage 依賴, UI而 UI 依賴 Dsl。

  • 在 DslPackage 專案中, UI\DocView.cs 包含顯示Windows Form控制項在 UI 專案中定義的程式碼。

  • UI 專案包含表單控制項的運作範例繫結至DSL。 不過,在中,當您變更了DSL定義,它就無法運作。 UI 專案包含:

    • 名為的 ModelViewControlWindows Form類別。

    • 包含其他部分定義名為的 ModelViewControl DataBinding.cs 檔案中。 若要查看其內容,請在 [方案總管] 開啟檔案的捷徑功能清單 [檢視程式碼]並選取[]。

Dd820642.collapse_all(zh-tw,VS.110).gif如需UI專案

當您更新DSL定義檔案定義自己的DSL,您必須更新專案中的 UI 控制項會顯示您的DSL。 不同 Dsl 於、和 DslPackage 專案中, UI 範例專案不會 DslDefinitionl.dsl產生。 您可以將.tt檔產生程式碼,如果需要,,雖然本逐步解說中並未涵蓋。

更新DSL定義

下列DSL定義在這個逐步解說。

DSL-Wpf-1

更新DSL定義

  1. 開啟DSL在設計工具中DslDefinition.dsl。

  2. 刪除 [ExampleElement]

  3. 將 [ExampleModel] 網域 陣列類別重新命名為。

    為它提供其他網域屬性中命名 大小 Int32]型別和 IsOrganic 型別。 [布林值]

    注意事項注意事項

    如果您刪除根網域類別來建立新的根,就必須重新設定編輯器是類別的屬性。在 [DSL總管][]中, [編輯器]選取[]。然後在[屬性]視窗中, [根類別 陣列將設為。

  4. 使用 [將的網域類別] 工具來建立下列領域類別:

    • 欄位 –請將名為的 大小其他網域屬性。

    • 動物 –在[屬性]視窗中, [繼承修飾詞 抽象]將設為。

  5. 使用 [網域類別] 工具來建立下列類別:

    • 執行羊

    • 山羊

  6. 使用 [繼承] 工具產生 山羊 並 執行羊 繼承自。 動物

  7. 使用 [內嵌] 工具內嵌 欄位 和 動物 下 陣列一個。

  8. 您可能會想要排列圖表。 若要減少重複的項目數目,請使用 [帶樹狀子目錄這裡] 在分葉項目捷徑功能上的命令。

  9. [轉換所有範本] 在[方案總管]工具列上。

  10. 建立 [Dsl] 專案。

    注意事項注意事項

    在這個狀況下,其他專案將不會建置而無錯誤。不過,我們會建立Dsl專案,使其組件提供資料來源精靈。

更新UI專案

現在您可以建立將資訊顯示在DSL模型所儲存的新使用者控制項。 讓您輕鬆連接使用者控制項加入至模型是透過資料繫結。 名為 [ModelingBindingSource] 的資料繫結介面卡型別特別設計DSL連接至非VMSDK介面。

若要定義您自己的DSL模型中做為資料來源

  1. 在 [資料] 功能表上,選擇[ [顯示資料來源]]。

    [資料來源] 視窗隨即開啟。

    選取 [加入新資料來源]。 [資料來源組態精靈] 隨即開啟。

  2. 選取 [物件], [下一步]否則為。

    展開 [Dsl], [Company.FarmApp], [陣列]然後選取[],為您的模型根類別。 選取 [完成]。

    在[方案總管]中, [UI] 專案現在包含 Properties\DataSources\Farm.datasource

    您的模型類別屬性和關聯會出現在[資料來源]視窗。

    DslWpf-3

連接您的模型加入至表單

  1. 在 [UI] 專案中,刪除所有現有的.cs檔案。

  2. 將名為的 FarmControl 新 [使用者控制項] 檔案加入至專案。 [UI]

  3. 在 [資料來源] 視窗中,在 [陣列]下拉式功能清單, [詳細資料]請選取[]。

    保留其他屬性的預設值。

  4. 開啟在設計檢視中FarmControl.cs。

    從[FarmControl上的資料來源視窗拖曳 [陣列] 。

    一組控制項的外觀,每個屬性的。 相關聯的屬性不會產生控制項。

  5. 刪除 [farmBindingNavigator]。 這會在 FarmControl 設計工具會自動產生,不過,此應用程式並不是很有用。

  6. 使用工具方塊,建立兩個執行個體, [DataGridView]並將它們命名 AnimalGridView 為和 FieldGridView。

    注意事項注意事項

    替代步驟將拖曳動物和欄位從[資料來源]視窗將項目拖曳至控制項。這個動作會自動建立資料格和繫結方格中檢視和資料來源之間。但是,當配套不為DSL正確運作。因此手動建立資料格和繫結較佳。

  7. 如果工具方塊不 [ModelingBindingSource] 包含工具,將其加入。 在 [資料]索引標籤上的捷徑功能清單, [選取項目]請選取[]。 在 [選取工具方塊項目。] 對話方塊中,從 .NET Framework Tab]功能表中選取 [ModelingBindingSource] 。

  8. 使用工具方塊,建立兩個執行個體, [ModelingBindingSource]並將它們命名 AnimalBinding 為和 FieldBinding。

  9. 每 [ModelingBindingSource farmBindingSource [資料來源 ] 個設定屬性。

    將 [DataMember] 屬性設定為或 [動物 欄位]。

  10. 將 [資料來源] 屬性設定 AnimalGridView 為 AnimalBinding[]。 FieldGridView FieldBinding

  11. 對陣列口味調整控制項的配置。

[ModelingBindingSource] 是執行數個函式是針對DSL的配接器:

  • 它包裝在VMSDK存放區交易的更新。

    例如,在中,當使用者刪除資料檢視方格中的資料列,規則繫結交易產生例外狀況。

  • 這可確定,在中,當使用者選取資料列時, [屬性]視窗會顯示所對應的模型項目的屬性,而不是資料格的資料列。

連結結構描述資料來源和檢視之間的。

DslWpf4

完成繫結至DSL

  1. 將在個別程式碼檔案中的下列程式碼 [UI] 加入至專案:

    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. 在 [DslPackage] 專案中, [DslPackage \ DocView.tt] 編輯更新下列變數定義:

    string viewControlTypeName = "FarmControl";
    

測試DSL

DSL方案可以建置並執行,不過,您稍後可能需要將進一步改善。

測試DSL

  1. 建置並執行方案。

  2. 在Visual Studio的實驗執行個體中, [範例] 開啟檔案。

  3. 在 [FarmApp總管]中,開啟位於根節點的 [陣列] 捷徑功能清單, [將新的山羊]然後選取[]。

    Goat1 出現在[]檢視 [動物] 。

    警告

    您必須使用 [陣列]節點,不是這個 [動物] 節點的捷徑功能清單。

  4. 選取 [陣列] 根節點並檢視其屬性。

    在表單檢視, [Name] 請變更或 [大小] 陣列。

    當您離開每個表單欄位時,對應的屬性在[屬性]視窗中變更。

引發DSL

立即執行更新屬性。

  1. 在FarmControl.cs設計檢視中,選取一個簡單的欄位(例如名稱、大小、IsOrganic。

  2. 在[屬性]視窗中, [DataBindings] 展開[]並開啟 [(進展)]。

    在 [格式化和進階繫結。]對話方塊, [資料來源更新模式]請在[]底下,選取 [OnPropertyChanged][]。

  3. 建置並執行方案。

    驗證,當您變更欄位的內容模型,陣列中的對應屬性就立即變更。

若要提供加入按鈕

  1. 在FarmControl.cs設計檢視,請使用工具來建立表單上的按鈕。

    編輯按鈕的名稱和文字,例如 新的執行羊。

  2. 在按下按鈕後開啟程式碼(例如在中按兩下)。

    編輯如下所示:

        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; }
        }
    

    您也需要加入下列指示詞:

    using Microsoft.VisualStudio.Modeling;
    
  3. 將山羊和欄位中的按鈕類似。

  4. 建置並執行方案。

  5. 確認新的按鈕將項目。 新項目會出現在FarmApp總管和套用適當的資料格檢視。

    您應該可以編輯項目的名稱在資料格檢視。 您也可以將它刪除從該處。

DSL-Wpf-2

Dd820642.collapse_all(zh-tw,VS.110).gif如需加入項目的程式碼

如需新項目按鈕,下列替代程式碼會比較簡單。

    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();
      }
    }

不過,這個程式碼不會設定一個預設名稱新項目。 它不會執行您在 [項目合併指示詞] 可能已經定義DSL的任何自訂的合併,因此,它不會執行任何可能已經定義的任何自訂合併程式碼。

因此建議您使用 ElementOperations 建立新項目的項目。 如需詳細資訊,請參閱自訂項目的建立和移動

請參閱

概念

如何定義網域指定的語言

Visualization and Modeling SDK - 網域指定的語言

其他資源

撰寫程式碼來自訂網域指定的語言