Динамическое создание пользовательского интерфейса с использованием DSL в .NET - PullRequest
0 голосов
/ 14 октября 2011

Я разрабатываю приложение WPF для клиента. Приложение должно предложить пользователю в начале производственного цикла заполнить несколько полей. Данные, которые пользователю предлагается ввести, зависят от типа продукта, связанного с производственным прогоном. Так, например, для продукта А может потребоваться, чтобы пользователь ввел номер срока годности, номер партии, а для продукта В может потребоваться, чтобы пользователь вводил только дату изготовления.

Мне нужно будет динамически создать пользовательский интерфейс и отобразить имя поля, элемент управления вводом (текстовое поле, список, флажок и т. Д.).

Система должна быть гибкой, и должен быть создан механизм, позволяющий пользователю «создавать» динамический макет пользовательского интерфейса.

Я смотрю на различные варианты, такие как:

  1. XML, чтобы объявить структуру пользовательского интерфейса, которую хотел бы пользователь. Затем приложение обрабатывает XML и создает соответствующие элементы управления пользовательским интерфейсом для различных элементов XML

  2. Пользовательский DSL, который позволит пользователю ввести что-то вроде:

    "создать текстовое поле для поля LOT NUMBER"

    Как и в случае подхода xml, приложение сохранит вышеприведенное и назначит его продукту и сохранит в БД. Во время запуска рабочего процесса приложение динамически создает пользовательский интерфейс.

Изначально пользователь будет редактировать эти файлы вручную и назначать их продукту. В конечном итоге мы планируем создать графический интерфейс для разработки пользовательского интерфейса с поддержкой перетаскивания.

У меня нет большого опыта работы с DSL. Просто интересно, подходит ли вышеуказанное приложение для DSL, или мне следует использовать совершенно другой подход.

1 Ответ

1 голос
/ 14 октября 2011

Microsoft предлагает SDK для визуализации и моделирования , ранее известный как DSL Toolkit.

Сюда входит графический дизайнер для создания вашего DSL. Выход конструктора составляет

  1. конструктор DSL (графический по умолчанию), который можно использовать для создания экземпляров вашей модели изнутри Visual Studio.
  2. API для управления вашей моделью во время выполнения
  3. Возможность создавать текстовые артефакты из экземпляра модели

Примером может быть создание экземпляра DSL для определенного типа продукта, который может указывать, что для типа продукта требуется ввести номер детали, цвет и дату истечения срока годности. При сохранении экземпляра модели он автоматически создает файл .xaml для пользовательского элемента управления, содержащий текстовое поле для номера детали, средство выбора цвета для цвета и средство выбора даты для даты истечения срока действия.

...