如何使用MVVM模式在WPF中创建动态表单?

时间:2014-09-08 15:50:49

标签: c# wpf forms xaml mvvm

我需要在WPF中创建动态表单。例如,假设我需要允许用户创建一个包含每个人信息的家谱,每个人都会有关于他们职业的信息。

class Person
{
    int age;
    int dateOfBirth;
    List<Job> jobList = new List<Job>();
}

class Job
{
    string title;
    int salary;
}

该程序需要能够包含允许类中所有成员输入数据的字段,包括多个作业。我希望表单数据(可能)在XAML中编码,如果他们点击按钮&#34;添加人物&#34;它将扩展另一个人的输入框,以允许用户添加有关该人的信息。这与&#34; Add Job&#34;相同。但这些工作只是在那个人之下。

(请注意,最终结果将是包含所有人及其子女的树数据结构)

我如何使用MVVM模式在WPF中执行此操作?在我学习MVVM模式之前,我已经使用了代码并使用c#创建了动态视图来编码XAML视图并将其动态添加为子元素。但我不认为这是最好的方法,因为它似乎太乏味了。

我是MVVM模式的新手,所以一些关于我如何做到这一点的小代码片段(使用数据绑定?)会非常有帮助。

我在XAML中编写了一个快速示例,说明了表单的外观:

enter image description here

1 个答案:

答案 0 :(得分:5)

使用DataTemplate s在WPF中解决了此问题。在任何你需要“重复”形式的地方,你会设置这样的东西:

<ItemsControl ItemsSource="{Binding Jobs}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <...>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

使用ListView获取集合控件,该集合控件将为绑定集合中的每个项目显示DataTemplate的实例。在DataTemplate内,您的DataContext是集合中的绑定项,即。 Job类的一个实例。

如果JobsObservableCollection<T>,那么当从绑定集合中添加或删除项目时,控件会自动更新。