您仍然可以使用绑定 - 因为 WPF 支持项目模板,并且由于您使用的是 MVVM 模式,您只需为列表中的每个子项目创建一个 VM(您甚至不需要这样做,您可以直接在每个列表项的模板到 DTO 或业务对象)
我现在正在做类似的事情 - 我有一个客户的材料测试列表,他们希望对每种材料进行可变数量和类型的测试,但也能够为他们的每个订单调整和更改这些测试顾客
他们实际上有两种测试类型,但为了描述这两种情况中更简单的一种(不需要子虚拟机本身),我刚刚创建了一个ItemsControl
具有项目模板的项目:
<ItemsControl ItemsSource="{SomeBinding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{PropertyDescription}" />
<TextBox Text="{PropertyValue}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
在这种情况下,模型只包含一个属性名称/值列表并将它们显示在堆栈面板中(您可能需要ItemPanel
使用ItemsPanelTemplate
. WPF 已经支持每种类型的数据模板)。ItemsControl
DataTemplateSelector
我目前正在使用 Caliburn.Micro 它实际上为您设置了很多子模板 - 因此,如果您将绑定项目创建为 VM,您可以执行以下简单操作:
<ItemsControl x:Name="SomeBinding" />
只要SomeBinding
属性中的子项是虚拟机本身,CM 就会负责其余的工作(尽管这是另一回事:P)