我创建了一个ListView
控件,绑定到ICollectionView
作为ItemsSource。将ItemsPanel
定义设为WrapPanel
以允许内容的水平填充。 ListView
还支持内容分组,并指定了groupstyle.HeaderTemplate
属性。
问题是,当我在没有ObservableCollection
定义的情况下将数据填充到底层GroupDescription
中时,WrapPanel
不会包装内容,其行为类似于垂直StackPanel
。打开/关闭分组功能后,WrapPanel
会按预期工作。
这是ListView
的样式定义:
<Style x:Key="ImageListViewStyle" TargetType="{x:Type ListView}">
<Setter Property="Selectionmode" Value="Single"/>
<Setter Property="SelectedItem" Value="{Binding SelectedImage}"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
<Setter Property="ItemsPanel">
<Setter.Value>
<itemspaneltemplate>
<WrapPanel Orientation="Horizontal"/>
</itemspaneltemplate>
</Setter.Value>
</Setter>
</Style>
此图片显示了“错误”结果Wrong alignment,但是在打开/关闭分组后,对齐方式正确Proper alignment。
经过一番调查,我发现刷新ListView
可以解决此问题。将第一个Item
添加到ObservableCollection
之后,足以强制刷新:
Public ReadOnly Property AddImagesCommand As New RelayCommand(
Sub()
Me.ImageList.Add(New ImageItemVM("Image-1",New Date(2018,1,22),125450))
'Necessary to activate proper behaviour of the WrapPanel as ItemsPanel control
Me.ImageListView.Refresh()
Me.ImageList.Add(New ImageItemVM("Image-2",30),12545450))
Me.ImageList.Add(New ImageItemVM("Image-3",2,2),4598622))
Me.ImageList.Add(New ImageItemVM("Image-4",12),5687252))
Me.ImageList.Add(New ImageItemVM("Image-5",26),98225654))
Me.ImageList.Add(New ImageItemVM("Image-6",4,17),5489953))
Me.ImageList.Add(New ImageItemVM("Image-7",21),356877))
Me.ImageList.Add(New ImageItemVM("Image-8",9,4),4455892))
Me.ImageList.Add(New ImageItemVM("Image-9",11),54989222))
Me.ImageList.Add(New ImageItemVM("Image-10",27),33559726))
Me.ImageList.Add(New ImageItemVM("Image-11",10,16),4581135))
Me.ImageList.Add(New ImageItemVM("Image-12",11,2665554))
End Sub)
我想避免代码中出现此类“骇客”,但我需要ListView
支持分组功能作为选项。如果不进行分组,则可以在更改Template
属性时解决此问题:
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListView}">
<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
<WrapPanel Orientation="Horizontal" IsItemsHost="True" />
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
有人可以在这里帮忙吗?