我想绑定一个二维集合 - 复杂数据类型集合的集合。因此控件看起来像(n)富文本框的垂直列表(列)。
每个列表都有相同数量的记录。
一种方法是将数据从viewmodel传递给视图,然后以编程方式在xaml后面的代码中创建这些列表。但是我不想这样做,有什么更简单的东西吗?
答案 0 :(得分:3)
只需使用数据绑定和数据模板:
<ItemsControl ItemsSource="{Binding MainCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding .}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<RichTextBox Text="{Binding .}"/>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
因此外部ItemsControl
以垂直StackPanel
绑定到集合和渲染集合。对于该集合中的每个集合,都有一个内部ItemsControl
。每个内部ItemsControl
都会将其集合中的每个项目显示为水平RichTextBox
中的StackPanel
。
显然,您需要根据需要修复绑定路径,并根据具体情况进行调整。
答案 1 :(得分:0)
<ListBox ItemsSource="{Binding Data}" Grid.Row="1"
Padding="20" Background="Transparent" BorderBrush="Black">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<ListBox ItemsSource="{Binding}" BorderBrush="Black" BorderThickness="2">
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderThickness="1" BorderBrush="Black" Padding="3"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid Width="300">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="1" Text="{Binding Prop1}" />
<TextBlock Grid.Row="2" Text="{Binding Prop2}" />
<TextBlock Grid.Row="3" Text="{Binding Prop3}" />
<TextBlock Grid.Row="4" Text="{Binding Prop4}" />
<TextBlock Grid.Row="5" Text="{Binding Prop5, StringFormat=d}" />
<TextBlock Grid.Row="6" Text="{Binding Prop6,StringFormat=c}" />
<TextBlock Grid.Row="7" Text="{Binding Prop7,StringFormat=c}" />
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>