Вопрос

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

Есть ли существующий проект, который упростит это?Прокомментируйте, пожалуйста, мою дизайнерскую идею (ниже).У меня всего ~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

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

Другие советы

Я настоятельно рекомендую включить класс 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 и на лету найти подходящее поле для использования или отключить автоматическое создание полей и просто загрузить его самостоятельно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top