我正在计划一个WPF应用程序,它将

  • 能够创建动态数据输入表单(意味着该表单从数据库中的数据而不是XAML中获取要显示的字段,它们的顺序等)
  • 尽可能使用MVVM模式

  • 我打算这样做:在客户数据输入 View 中,我将设置数据上下文:
    <UserControl.DataContext>
        <vm:DynamicFormViewModel/>
    </UserControl.DataContext>
    

    然后在我的XAML中包含一个元素作为表单的占位符:
    <UserControl.Content>
        <view:DynamicFormView x:Name="CustomerEntry"/>
    </UserControl.Content>
    

    然后在我的ModelView中,我不希望具有静态属性,但我想以以下方式将XAML作为ASP.NET中的一个内置HTML控件进行构建:
    View view = new View();
    view.Children.Add(...)
    

    然后以ViewModel从模型获取的数据(名字,姓氏)和元数据(字段标签,字段名称,字段帮助文本,字段显示顺序等)的集合为基础构建Grid。
  • 是否有人构建了可以以这种方式创建动态表单的WPF应用程序?
  • 您是否使用了MVVM模式?
  • 是否可以通过这种方式使用MVVM模式,或者MVVM模式是否预设了 View 模型中直接绑定(bind)到 View 中静态元素的静态字段?
  • 最佳答案

    您将必须为各种字段数据类型编写数据模板,以便WPF将根据其类型选择如何显示数据。这种格式的东西:

    注意:这不是WPF只是伪代码

    <DataTemplate DataType="{x:Type DateTime}">
      <DatePicker Value="{Binding}"/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type String}">
      <TextBox Text="{Binding}"/>
    </DataTemplate>
    

    它不必是原始类型。它可以是EmailDateApproved甚至是Url类类型。例如
    class Customer
    {
       public Email Email{get;set;}
       public DateTime DateApproved{get;set;}
       public URI Url{get;set;}
    }
    
    public class Email
    {
       public string Type{get;set;}
       public string Value{get;set;}
    }
    

    ..等等...

    更新

    在MSDN上查看以下WPF动态UI示例:Dynamic Data Entry with WPF and LINQ

    09-11 19:14
    查看更多