我有一个任意数量的ViewModels要显示,我希望ViewModels显示在两列中。第一列主要应显示名称/描述,第二列的内容会有所不同。我希望第一列为Grid
布局,第一列为Width = "auto"
,第二列为Width = "*"
。
我尝试使用ListView
GridView
,但有一些缺陷。
ListViewItem
s(不需要)GridViewColumns
有标题(浪费空间/不需要)GridViewColumns
不支持Width = "*"
Grid
,因此不会使用所有可用空间我可以使用Grid
,但我必须为每个ViewModel添加Grid.RowDefinitions
,并且无法通过Binding设置Grid.Row
属性。
我还考虑使用StackPanel
,但这不支持模板化,我不知道如何同步第一列的Width
。
那么,有人知道哪个ItemControl
最适合这个目的吗?
答案 0 :(得分:1)
如果不进行测试,我希望带有数据模板的ItemsControl是一个合适的解决方案。 您可以在父元素上使用Grid.IsSharedSizeScope =“true”,在本例中为ItemsControl,然后使用SharedSizeGroup =“somename”同步第一列的宽度。
<Grid>
<Grid.Resources>
<DataTemplate x:Key="itemTemplate" DataType="{x:Type MyItemType}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="column1" Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Title}"/>
<!-- More stuff here -->
</Grid>
</DataTemplate>
</Grid.Resources>
<ItemsControl Grid.IsSharedSizeScope="True" ItemTemplate="{StaticResource itemTemplate}" />
</Grid>
答案 1 :(得分:1)
我会使用带有Grid作为模板的ListBox,如下所示:
<ListBox ItemsSource="{Binding SomeData}" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Data1}" Grid.Column="0"></TextBlock>
<TextBlock Text="{Binding Data1}" Grid.Column="1"></TextBlock>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>