,您仍然可以使用绑定 - 因为WPF支持项目模板,因为你使用的是MVVM模式你可以创建一个虚拟机列表中的每个子项(你甚至不需要做到这一点你可以直接在每个列表项的模板中绑定到DTO或业务对象)
我现在正在做一个类似的事情 - 我有一个客户端的材料测试列表,他们想要一个变量数和每种材料的测试类型,但也能够调整和更改这些测试每个订单为他们的客户
他们实际上有两种测试类型,但描述更简单的o F中的例(不要求孩子的虚拟机本身)我刚刚创建一个具有项模板的ItemsControl
:
<ItemsControl ItemsSource="{SomeBinding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{PropertyDescription}" />
<TextBox Text="{PropertyValue}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
在这种情况下,模型只包含属性名称/值的列表,并显示它们在堆叠面板中(您可能需要使用ItemsPanelTemplate
来设置ItemPanel
。显然你可以有一个扩展的ItemsControl
,允许DataTemplateSelector
为每种类型显示不同的数据模板(实际上WPF已经支持每种类型的数据模板)。
我目前使用Caliburn.Micro实际上做了很多关于你建立儿童模板 - 如果你创建绑定物品作为虚拟机,你可以做这样简单的东西:
<ItemsControl x:Name="SomeBinding" />
只要SomeBinding
属性中的子项都是虚拟机本身(而这又是另一个故事:P),CM就会处理剩下的东西