2

我们正在研究如何从预定义字段定义的动态列表创建数据输入视图。“预定义”是指只有 8 种基本字段类型。Silverlight Toolkit 的 DataForm 控件几乎是我们想要的,但它以对象属性(不是自定义定义列表)为目标。

是否有现有的项目可以使这变得容易?请评论我的设计理念(下)。我只有大约 2 周的 Silverlight 经验。

基本设计理念:

我正在考虑定义自定义数据字段类型。将IEnumerable<BaseDataField>被 UI 接收、枚举,并根据每个字段的类型创建控件。每个字段都将创建一个带有描述的标签,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 中轻松完成,还是我们应该创建一个自定义控件?

注意:该程序将是现有多层 LOB 平台的 Web UI。所有数据都从基于 JSON 的 REST 服务序列化。

谢谢!

4

2 回答 2

2

我强烈建议将 DataForm 类合并到您的解决方案中,它确实能够处理自定义控件。多年来,我一直在追求理想的最小 xaml 数据表单的目标,我最终确定了我认为 DataForm 的内置功能和从 DataField 派生的自定义字段的完美结合。例如,我只是扩展了 DataField,以便在未指定 Content 属性时,它会自动使用 TextBox,从而最大限度地减少我的 XAML 时间。我还添加了对 DataForm 本身不支持的 DisplayFormatAttribute 的支持。

无论如何,您首先可以做的是创建一堆如上所述的子类,并从 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 事件并即时查找要使用的适当字段,或者您可以禁用自动字段生成并使用您自己的加载它。

于 2010-01-26T08:53:39.573 回答
0

我们从 DataForm 开始,但最终覆盖了使它有用的所有内容,但仍然存在一些问题。我从这次尝试中学到了很多东西,并最终为这项工作构建了一个自定义控件。不幸的是,这个解决方案不是很可扩展......

于 2010-03-30T18:44:43.223 回答