我们正在研究如何从预定义字段定义的动态列表中创建数据输入 View 。 “预定义”是指只有 8 种基本字段类型。 Silverlight Toolkit 的 DataForm 控件几乎是我们想要的,但它以对象属性(不是自定义定义列表)为目标。
是否有现有项目可以简化此操作?请评论我的设计理念(下)。我只有大约 2 周的 Silverlight 经验。
基本设计思路:
我正在考虑定义自定义数据字段类型。一个IEnumerable<BaseDataField>
将由 UI 接收、枚举,并根据每个字段的类型创建控件。每个字段都将创建一个带有描述和 BooleanDataField
的标签将创建一个复选框,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
这将被扩展以使字段可绑定(bind);允许为每种类型指定自定义控件;并获得验证反馈。
它可以在 Silverlight 中轻松完成吗?还是我们应该创建一个自定义控件?
注意:此程序将是现有多层 LOB 平台的 Web UI。所有数据都从基于 JSON 的 REST 服务序列化。
谢谢!
最佳答案
我强烈建议将 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 事件并查找适当的字段以即时使用,或者您可以禁用自动字段生成并使用您自己的字段加载它。
关于c# - Silverlight 中的动态数据输入表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2138218/