将数据添加到ItemsSource实例时,ListView控件将忽略ItemsPanel定义

我创建了一个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>

有人可以在这里帮忙吗?

l36468146 回答:将数据添加到ItemsSource实例时,ListView控件将忽略ItemsPanel定义

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3110119.html

大家都在问