Динамические формы ввода данных в Silverlight - PullRequest
2 голосов
/ 26 января 2010

Мы изучаем, как создавать представления ввода данных из динамического списка предопределенных определений полей. Под «предопределенным» я подразумеваю, что существует только 8 основных типов полей. Элемент управления DataForm в Silverlight Toolkit - почти то, что нужно, но он нацелен на объект properties (не список пользовательских определений).

Есть ли существующий проект, чтобы сделать это легко? Пожалуйста, прокомментируйте мою идею дизайна (ниже). У меня есть только ~ 2 недели опыта Silverlight.

Основная идея проекта:

Я думаю об определении пользовательских типов полей данных. IEnumerable<BaseDataField> будет получен пользовательским интерфейсом, будет перечислен, и элементы управления будут созданы на основе типа каждого поля. Каждое поле создаст метку с описанием, а BooleanDataField создаст CheckBox, LookupDataField создаст ComboBox и т. Д.

Псевдокод для пояснения идеи:

public abstract class BaseDataField {
    public string FieldCode { get; private set; }
    public string FieldDescription { get { return FieldDefinitions.Instance.FieldDescription(FieldCode); } }
    ...
}

public class StringDataField : BaseDataField
public class BooleanDataField : BaseDataField
public class CurrencyDataField : BaseDataField
public class IntegerDataField : BaseDataField
public class NumericDataField : BaseDataField
public class DateTimeDataField : BaseDataField
public class LookupDataField : BaseDataField
public class SpecialDataField : BaseDataField

Это будет расширено, чтобы сделать поля связанными; разрешить указание пользовательских элементов управления для каждого типа; и иметь подтверждение обратной связи.

Легко ли это сделать в Silverlight или мы должны создать собственный элемент управления?

Примечание. Эта программа будет веб-интерфейсом для существующей многоуровневой платформы больших объектов. Все данные сериализуются из службы REST на основе JSON.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 января 2010

Я бы настоятельно рекомендовал включить класс DataForm в ваше решение, и он действительно способен обрабатывать пользовательские элементы управления. В течение многих лет я преследовал эту цель создания идеальной формы данных с минимальным xaml, и в конце концов я остановился на том, что я считаю отличным сочетанием встроенной функциональности DataForm и настраиваемых полей, производных от DataField. Например, я просто расширил DataField, чтобы, когда свойство Content не указывалось, оно автоматически использовало TextBox, что минимизировало мой большой XAML-результат. Я также добавил поддержку DisplayFormatAttribute, который DataForm не поддерживает изначально.

В любом случае, первое, что вы можете сделать, - это создать группу подклассов, как вы описали выше, и наследовать от DataField. Затем в методе OnApplyTemplate создайте элемент для представления данных. Например:

class BooleanDataField : DataField {

    protected override void OnApplyTemplate() {

        if (this.Content == null) {
            var check = new CheckBox();
            check.SetBinding(CheckBox.IsCheckedProperty, 
                new Binding(this.PropertyPath));
            this.Content = check;
        }

        base.OnApplyTemplate();
    }

}

Что касается загрузки метаданных вашего поля в DataForm, у вас есть несколько вариантов. Вы можете обработать событие AutoGeneratingField и найти подходящее поле для использования на лету, или вы можете отключить автоматическую генерацию поля и просто загрузить его своим собственным.

0 голосов
/ 30 марта 2010

Мы начали с DataForm, но закончили тем, что переписали все, что делает его полезным, и все еще имели некоторые проблемы. Я многому научился из этой попытки и в итоге создал пользовательский элемент управления для этой работы. К сожалению, это решение не очень расширяемое ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...