Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Anda dapat menggunakan Formulir Windows untuk menampilkan status model bahasa khusus domain (DSL), alih-alih menggunakan diagram DSL. Topik ini memandikan Anda mengikat Formulir Windows ke DSL dengan menggunakan Visualisasi Visualisasi dan Pemodelan SDK Visual Studio.
Gambar berikut menunjukkan UI Formulir Windows dan penjelajah model untuk instans DSL:

Membuat DSL Formulir Windows
Templat DSL Minimal WinForm Designer membuat DSL minimal yang dapat Anda ubah agar sesuai dengan kebutuhan Anda sendiri.
Buat DSL dari templat Minimal WinForm Designer .
Dalam panduan ini, nama-nama berikut diasumsikan:
- Solusi dan nama DSL:
FarmApp - Kumpulan nama XML:
Company.FarmApp
- Solusi dan nama DSL:
Bereksperimenlah dengan contoh awal yang disediakan templat:
Ubah Semua Templat.
Buat dan jalankan sampel (Ctrl+F5).
Dalam instans eksperimental Visual Studio, buka
Samplefile dalam proyek penelusuran kesalahan.Perhatikan bahwa itu ditampilkan dalam kontrol Formulir Windows.
Anda juga dapat melihat elemen model yang ditampilkan di Explorer.
Tambahkan beberapa elemen baik dalam formulir atau Explorer, dan perhatikan bahwa elemen tersebut muncul di tampilan lain.
Dalam instans utama Visual Studio, perhatikan poin-poin berikut tentang solusi DSL:
DslDefinition.dsltidak berisi elemen diagram. Ini karena Anda tidak akan menggunakan diagram DSL untuk melihat model instans DSL ini. Sebagai gantinya, Anda akan mengikat Formulir Windows ke model, dan elemen pada formulir akan menampilkan model.Selain
Dslproyek danDslPackage, solusinya berisi proyek ketiga bernamaUI.proyek UI berisi definisi kontrol Formulir Windows.DslPackagetergantung padaUI, danUItergantung padaDsl.DslPackageDalam proyek,UI\DocView.csberisi kode yang menampilkan kontrol Formulir Windows yang ditentukan dalamUIproyek.Proyek berisi
UIsampel kerja kontrol formulir yang terikat ke DSL. Namun, ini tidak akan berfungsi ketika Anda telah mengubah Definisi DSL. Proyek berisiUI:Kelas Formulir Windows bernama
ModelViewControl.File bernama
DataBinding.csyang berisi definisi parsial tambahan dariModelViewControl. Untuk melihat kontennya, di Penjelajah Solusi, buka menu pintasan untuk file dan pilih Tampilkan Kode.
Tentang proyek UI
Ketika Anda memperbarui file Definisi DSL untuk menentukan DSL Anda sendiri, Anda harus memperbarui kontrol dalam UI proyek untuk menampilkan DSL Anda. Dsl Tidak seperti proyek dan DslPackage , proyek sampel UI tidak dihasilkan dari DslDefinitionl.dsl. Anda dapat menambahkan file .tt untuk menghasilkan kode jika Anda mau, meskipun itu tidak tercakup dalam panduan ini.
Memperbarui definisi DSL
Gambar berikut adalah definisi DSL yang digunakan dalam panduan ini.

Buka DslDefinition.dsl di perancang DSL.
Hapus ExampleElement
Ganti nama kelas domain ExampleModel menjadi
Farm.Berikan properti domain tambahan bernama
Sizetipe Int32, danIsOrganicjenis Boolean.Catatan
Jika Anda menghapus kelas domain akar lalu membuat akar baru, Anda harus mengatur ulang properti Kelas Akar Editor. Di DSL Explorer, pilih Editor. Kemudian di jendela Properti, atur Kelas Akar ke
Farm.Gunakan alat Kelas Domain Bernama untuk membuat kelas domain berikut:
Field- Berikan ini properti domain tambahan bernamaSize.Animal- Di jendela Properti, atur Pengubah Warisan ke Abstrak.
Catatan
Alat Kelas Domain Bernama dan alat lain yang disebutkan di bagian ini ditemukan di jendela alat Kotak Alat . Anda dapat membuka atau menyembunyikan jendela ini dengan Kotak Alat Tampilan>.
Gunakan alat Kelas Domain untuk membuat kelas berikut:
SheepGoat
Gunakan alat Warisan untuk membuat
GoatdanSheepmewarisi dariAnimal.Gunakan alat Penyematan untuk menyematkan
FielddanAnimaldi bawahFarm.Anda mungkin ingin merapikan diagram. Untuk mengurangi jumlah elemen duplikat, gunakan perintah Bring Subtree Here pada menu pintasan elemen daun.
Ubah Semua Templat di toolbar Penjelajah Solusi.
Bangun proyek Dsl.
Catatan
Pada tahap ini, proyek lain tidak akan dibangun tanpa kesalahan. Namun, kami ingin membangun proyek Dsl sehingga perakitannya tersedia untuk Wizard Sumber Data.
Memperbarui proyek UI
Sekarang Anda dapat membuat kontrol pengguna baru yang akan menampilkan informasi yang disimpan dalam model DSL. Cara term mudah untuk menyambungkan kontrol pengguna ke model adalah melalui pengikatan data. Jenis adaptor pengikatan data bernama ModelingBindingSource dirancang khusus untuk menghubungkan DLL ke antarmuka non-VMSDK.
Menentukan model DSL Anda sebagai sumber data
Pada menu Data , pilih Perlihatkan Sumber Data.
Jendela Sumber Data terbuka.
Pilih Tambahkan Sumber Data Baru. Wizard Konfigurasi Sumber Data terbuka.
Pilih Objek, Berikutnya.
Perluas Dsl, Company.FarmApp, dan pilih Farm, yang merupakan kelas akar model Anda. Pilih Selesai.
Dalam Penjelajah Solusi, proyek UI sekarang berisi Properties\DataSources\Farm.datasource
Properti dan hubungan kelas model Anda muncul di jendela Sumber Data.

Koneksi model Anda ke formulir
Dalam proyek UI, hapus semua file .cs yang ada.
Tambahkan file Kontrol Pengguna baru bernama
FarmControlke proyek UI.Di jendela Sumber Data, pada menu drop-down di Farm, pilih Detail.
Biarkan pengaturan default untuk properti lainnya.
Buka FarmControl.cs dalam tampilan desain.
Seret Farm dari jendela Sumber Data ke FarmControl.
Sekumpulan kontrol muncul, satu untuk setiap properti. Properti hubungan tidak menghasilkan kontrol.
Hapus farmBindingNavigator. Ini juga secara otomatis dihasilkan dalam perancang
FarmControl, tetapi tidak berguna untuk aplikasi ini.Menggunakan kotak alat, buat dua instans DataGridView, dan beri nama
AnimalGridViewdanFieldGridView.Catatan
Langkah alternatifnya adalah menyeret item Hewan dan Bidang dari jendela Sumber Data ke kontrol. Tindakan ini secara otomatis membuat kisi data dan pengikatan antara tampilan kisi dan sumber data. Namun, pengikatan ini tidak berfungsi dengan benar untuk DLL. Oleh karena itu, lebih baik membuat kisi dan pengikatan data secara manual.
Jika Kotak Alat tidak berisi alat ModelingBindingSource , tambahkan. Pada menu pintasan tab Data, pilih Pilih Item. Dalam dialog Pilih Item Kotak Alat, pilih PemodelanBindingSource dari tab .NET Framework.
Menggunakan Kotak Alat, buat dua instans ModelingBindingSource, dan beri nama
AnimalBindingdanFieldBinding.Atur properti DataSource dari setiap ModelingBindingSource ke farmBindingSource.
Atur properti DataMember ke Hewan atau Bidang.
Atur properti DataSource ke
AnimalGridViewAnimalBinding, dan dariFieldGridViewkeFieldBinding.Sesuaikan tata letak kontrol Farm sesuai selera Anda.
ModelingBindingSource adalah adaptor yang melakukan beberapa fungsi yang khusus untuk DLL:
Ini membungkus pembaruan dalam Transaksi Penyimpanan VMSDK.
Misalnya, ketika pengguna menghapus baris dari kisi tampilan data, pengikatan reguler akan menghasilkan pengecualian transaksi.
Ini memastikan bahwa, ketika pengguna memilih baris, jendela Properti menampilkan properti elemen model yang sesuai, bukan baris kisi data.

Skema tautan antara sumber data dan tampilan.
Menyelesaikan pengikatan ke DSL
Tambahkan kode berikut dalam file kode terpisah dalam proyek 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); } } }Dalam proyek DslPackage, edit DslPackage\DocView.tt untuk memperbarui definisi variabel berikut:
string viewControlTypeName = "FarmControl";
Menguji DSL
Solusi DSL sekarang dapat membangun dan menjalankan, meskipun Anda mungkin ingin menambahkan peningkatan lebih lanjut nanti.
Membangun dan menjalankan solusi.
Dalam instans eksperimental Visual Studio, buka File sampel .
Di FarmApp Explorer, buka menu pintasan pada simpul akar Farm, dan pilih Tambahkan Kambing Baru.
Goat1muncul dalam tampilan Hewan .Peringatan
Anda harus menggunakan menu pintasan pada simpul Peternakan, bukan simpul Hewan.
Pilih simpul akar Farm dan lihat propertinya.
Dalam tampilan formulir, ubah Nama atau Ukuran farm.
Saat Anda menavigasi menjauh dari setiap bidang dalam formulir, properti terkait berubah di jendela Properti.
Meningkatkan DSL
Membuat properti segera diperbarui
Dalam tampilan desain FarmControl.cs, pilih bidang sederhana seperti Nama, Ukuran, atau IsOrganic.
Di jendela Properti, perluas DataBindings dan buka (Tingkat Lanjut).
Dalam dialog Pemformatan dan Pengikatan Tingkat Lanjut, di bawah Mode Pembaruan Sumber Data, pilih OnPropertyChanged.
Membangun dan menjalankan solusi.
Verifikasi bahwa saat Anda mengubah konten bidang, properti terkait dari model Farm segera berubah.
Sediakan tombol Tambahkan
Dalam tampilan desain FarmControl.cs, gunakan kotak alat untuk membuat tombol pada formulir.
Edit nama dan teks tombol, misalnya ke
New Sheep.Buka kode di belakang tombol (misalnya dengan mengklik dua kali).
Edit sebagai berikut:
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; } }Anda juga perlu menyisipkan arahan berikut:
using Microsoft.VisualStudio.Modeling;Tambahkan tombol serupa untuk Kambing dan Bidang.
Membangun dan menjalankan solusi.
Verifikasi bahwa tombol baru menambahkan item. Item baru akan muncul di FarmApp Explorer dan dalam tampilan kisi data yang sesuai.
Anda harus dapat mengedit nama elemen dalam tampilan kisi data. Anda juga dapat menghapusnya dari sana.

Tentang kode untuk menambahkan elemen
Untuk tombol elemen baru, kode alternatif berikut sedikit lebih sederhana.
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();
}
}
Namun, kode ini tidak mengatur nama default untuk item baru. Ini tidak menjalankan penggabungan yang disesuaikan yang mungkin telah Anda tentukan dalam Arahan Gabungan Elemen DSL, dan tidak menjalankan kode penggabungan kustom apa pun yang mungkin telah ditentukan.
Oleh karena itu, kami sarankan Anda menggunakan ElementOperations untuk membuat elemen baru. Untuk informasi selengkapnya, lihat Menyesuaikan Pembuatan dan Gerakan Elemen.