Создание доменного языка на основе Windows Forms
Можно использовать Windows Forms для отображения состояния модели доменного языка (DSL) вместо использования схемы DSL.В этом разделе помогают выполнить до связывания форма Windows, DSL, используя визуализация Visual Studio и моделирование SDK.
Экземпляр DSL, что означает пользовательский интерфейс формы Windows и обозреватель моделей.
Создание Windows Forms DSL
Шаблон минимальный конструктор WinForm DSL создает минимальный DSL, который можно изменить в соответствии с собственными требованиями.
Создание минимального WinForms DSL
Создайте DSL из шаблона минимальный конструктор WinForm.
В этом пошаговом руководстве выполняются следующие имена:
Решение и имя DSL
FarmApp
Пространство имен
Company.FarmApp
Эксперимент с исходного примера, шаблон предоставляет:
Преобразовать все шаблоны.
Построение и запуск примера (CTRL+F5).
В экспериментальном экземпляре Visual Studio, откройте файл Sample в проекте отладки.
Обратите внимание, что он отображается в элементе управления Windows Forms.
Также можно просматривать элементы модели, отображаемой в обозревателе.
Некоторые элементы или добавьте в форму или обозревателе и обратите внимание, что они отображаются в другой отображения.
В основном экземпляре Visual Studio обратите внимание на следующие моменты о решении DSL:
DslDefinition.dsl не содержит элементов схемы.Это связано с тем, что не используется схемы DSL для просмотра моделей экземпляра этого DSL.Вместо этого в привязке форма Windows для моделей и элементов на форме отобразятся в модели.
В дополнение к проектам Dsl и DslPackage решение с именем проекта содержит третий проект UI.ИП содержит определение управления Windows Forms.Зависит от UIDslPackage и зависит от DslUI.
В проекте DslPackage, UI\DocView.cs содержит код, который отображает элемент управления Windows Forms, которое определено в проекте UI.
Проект UI содержит образец реализации элемента управления формы, привязанного к DSL.Однако он не будет работать при изменении определение DSL.Проект UI содержит:
Класс Windows Forms ModelViewControl.
Файл с именем DataBinding.cs, содержащий дополнительные частично определение ModelViewControl.Просматривать его содержимое в Обозреватель решений открыть контекстное меню, и выберите Перейти к коду для файла.
о проекте пользовательского интерфейса
При обновлении файла определения DSL, чтобы определить собственный DSL, следует обновить элемент управления в проекте UI указать свой DSL.В отличие от проектов Dsl и DslPackage, проект UI образцы не создается из DslDefinitionl.dsl.Можно добавить файлы .tt для создания кода если требуется, хотя это не предусматривано в этом пошаговом руководстве.
Обновить определение DSL
Следующее определение DSL используется в данном пошаговом руководстве.
Обновить определение DSL
Откройте в конструкторе DslDefinition.dsl DSL.
Удаление ExampleElement
Переименуйте доменный класс ExampleModel к ферма.
Присвойте ей дополнительные именованные свойства домена Размер типа Int32 и IsOrganic типа логический.
Примечание
При удалении класса корневого домена, а затем создать новый корень, сбросьте свойство класса корневого редактора.В обозреватель DSL выберите Редактор.Затем в окне свойства задайте Корневой класс к ферма.
Используйте средство Доменный класс, именуемый для создания следующих доменных классы:
поле – предоставьте этому дополнительное свойство с именем домена Размер.
животное – в окне свойства выберите Модификатор наследования к Абстрактный.
Используйте средство доменный класс чтобы создать следующие классы:
Овцы
Козочка
Используйте средство Наследование чтобы сделать козочка и овцы наследовать от животное.
Используйте средство Внедрение для внедрения поле и животное в ферма.
Может возникнуть необходимость в аккуратный схему.Чтобы сократить число повторяющихся элементов, используйте команду Здесь принесите поддерево в контекстном меню элементами конечного объекта.
Преобразовать все шаблоны на панели инструментов обозревателя решений.
Постройте проект Dsl.
Примечание
На этом этапе другие проекты, не построят без ошибок.Однако мы хотим построения проекта Dsl, чтобы его сборка будет мастер источников данных.
Обновление проекта пользовательского интерфейса
Теперь можно создать новый пользовательский элемент управления, который отображает сведения, которые хранятся в модели DSL.Самый простой способ подключения пользовательского элемента управления в модели через привязки данных.Переходника ModelingBindingSource привязки с именем типом данных создан специально для подключения DSLs к интерфейсам non-VMSDK.
Определение модели DSL в качестве источника данных
В меню Данные выберите Показать источники данных.
Откроется окно Источники данных.
Выберите Добавить новый источник данных.Появится мастер настройки источника данных.
Выберите Объект, Далее.
Разверните Dsl, Company.FarmApp и выберите Ферма, корневой класс модели.Выберите Готово.
В обозревателе решений проект ИП теперь содержит Properties\DataSources\Farm.datasource
Свойства и связи этого класса модели отображаются в окне источники данных.
Подключить модель в форму
В проекте ИП удалите все существующие файлы с расширением cs.
Добавьте новый файл с именем Пользовательский элемент управленияFarmControl в проект ИП.
В окне Источники данных в раскрывающемся меню выберите Сведения на Ферма.
Примите параметры по умолчанию для других свойств.
Откройте FarmControl.cs в представлении конструирования.
Перетащите Ферма из окна источники данных на FarmControl.
Набор элементов управления, по одному для каждого свойства.Свойства связи не создают элементы управления.
Удаление farmBindingNavigator.Это также автоматически создается в конструкторе FarmControl, но не полезно для данного приложения.
Использование области элементов, создайте 2 экземпляра DataGridView и назовите их AnimalGridView и FieldGridView.
Примечание
Альтернативный шаг животных и полей перетаскивания элементов из окна источники данных в элемент управления.Это действие автоматически создает сетки и привязки данных между представлением сетки и источником данных.Однако эта привязка не работает правильно DSLs.Поэтому лучше создавать сетки и привязки данных вручную.
Если панель элементов не содержит средство ModelingBindingSource, добавьте его.В контекстном меню выберите Выбрать элементы вкладки Данные.В диалоговом окне Выбор элементов панели элементов выберите ModelingBindingSource из вкладка платформы .NET Framework.
С помощью панели элементов создайте 2 экземпляра ModelingBindingSource и назовите их AnimalBinding и FieldBinding.
Установите свойство DataSource каждого ModelingBindingSource к farmBindingSource.
Установите свойство DataMember к животные или Поля.
Задайте для свойства DataSourceAnimalGridView к AnimalBinding и FieldGridView к FieldBinding.
Обработка структуры управления фермы к вашему вкусу.
ModelingBindingSource Адаптер, который выполняет несколько функций, которые относятся к DSLs:
Он создает программу-оболочку обновления хранилища VMSDK в транзакции.
Например, когда пользователь удаляет строку из сетки представления данных, обычная привязка привела бы к исключению транзакции.
Это гарантирует, что, когда пользователь выбирает строку, в окне свойства отображаются свойства соответствующего элемента модели, вместо строки сетки данных.
Схема связей между источниками данных и представлениями.
Запуск привязки к DSL
Добавьте следующий код в отдельном файле кода в проекте ИП:
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); } } }
В проекте DslPackage, правка DslPackage \ DocView.tt обновления следующее определение переменной:
string viewControlTypeName = "FarmControl";
Тестирование DSL
Решение DSL теперь может выполнить построение и запуск, но можно добавить больше улучшения далее.
Тестирование DSL
Постройте и запустите это решение.
В экспериментальном экземпляре Visual Studio, откройте файл Образец.
В обозреватель FarmApp открыть контекстное меню в корневом узле Ферма и выберите Добавьте новую козочка.
Goat1 отображается в представлении животные.
Внимание
Необходимо использовать контекстное меню узла Ферма, не узле животные.
Выберите корневой узел Ферма и просмотр его свойств.
В представлении формы измените Имя или Размер фермы.
При переходе от каждого поля в форме, соответствующее свойство изменяется в окне свойства.
Увеличение DSL
Выполнить обновление свойств немедленно
В представлении конструирования FarmControl.cs выберите поле как простое имя, размер или IsOrganic.
В окне свойства разверните Привязка данных и открыть (Дополнительно).
В диалоговом окне Форматирование и дополнительная привязка в разделе Режим обновления источника данных выберите OnPropertyChanged.
Постройте и запустите это решение.
Убедитесь в том, что при изменении содержимого поля, соответствующего свойства модели фермы изменяет сразу.
Чтобы обеспечить добавьте кнопки
В представлении конструирования FarmControl.cs используйте область элементов, чтобы создать кнопки на форме.
Правка имя и текст кнопки, например к новые овцы.
Открытие код за кнопкой (например, дважды щелкнув ее).
Правка его следующим образом:
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;
Добавьте одинаковые кнопки для козочек и полей.
Постройте и запустите это решение.
Убедитесь, что новая кнопку добавить элемент.Новый элемент должен присутствовать и в обозревателе FarmApp и в соответствующее представление сетки данных.
Необходимо иметь возможность изменять имена элементов в представлении в виде сетки данных.Можно также удалять его оттуда.
О коде, чтобы добавить элемент
Для новых кнопок элемента, следующий альтернативный код немного более простым.
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 чтобы создать новые элементы.Дополнительные сведения см. в разделе Настройка создания и перемещения элементов.
См. также
Основные понятия
Пакет SDK визуализации и моделирования — доменные языки