c# - Silverlight 中的动态数据输入表单

标签 c# wpf silverlight dynamic-controls data-entry

我们正在研究如何从预定义字段定义的动态列表中创建数据输入 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/

相关文章:

c# - (ViewModel)DataContext 返回 null

c# - 点击新窗口.xaml

c# - silverlight 项目文件的 ItemGroup 中的 WCFMetadata 标记

silverlight - Entity Framework 连接字符串中的元数据问题

c# - 这怎么不会在Silverlight中引起跨线程异常?

c# - wpf:更改 WebBrowser 控件的字体大小

c# - "Unable to find an entry point named"在 c# 中使用 C dll

c# - 为项目列表选择正确的控件

wpf - 在 WrapPanel 中同步 WPF 控件宽度

c# - 微软 Surface vs Windows Touch?