В рамках создаваемого мною приложения я могу добавить несколько «плагинов» в «рабочую область», где их можно изменить и при необходимости изменить их размер. Я хочу, чтобы каждый плагин мог регистрировать WorkspaceParameters (глобальные параметры, общие для всех плагинов) с классом WorkspaceManager (предоставляемым через интерфейс IWorkspaceManager). Когда плагин регистрирует глобальный параметр, WorkspaceManager сначала проверяет, зарегистрирован ли один с тем же именем, что и ранее, и, если он имеет, плагин просто подписывается на уведомление, если он изменяется. Если он еще не был создан с данным именем, создается новый. Класс WorkspaceParameter в настоящее время выглядит следующим образом:
public class WorkspaceParameter
{
public string Label { get; set; }
public Type ParameterType { get; set; }
public object Value { get; set; }
}
Затем в приложении появляется представление о том, что я хочу отобразить каждый параметр WorkspaceParameter, чтобы пользователь мог изменить значение. Пользовательский интерфейс должен основываться на элементе ParameterType каждого WorkspaceParameter, а все параметры должны отображаться в StackPanel. Например, если типом является DateTime, я хочу отобразить текстовое поле с селектором календаря рядом с ним. Если это строка, простое текстовое поле с меткой рядом с ней и, наконец, на данный момент, если это тип перечисления, выпадающий список с доступными параметрами перечисления.
Как я могу реализовать это динамическое представление, используя принципы PRISM и MVVM?