显示多次的ListView组标题

时间:2019-01-29 23:04:41

标签: wpf xaml listview data-binding grouping

我有一个ListView,其中包含基于某个WPF tutorial编写的组和组标题。

这正常工作,但是如果我关闭窗口,然后通过重新创建(创建新实例)将其重新打开,则所有标头都会重复。 即而不是在其下有“我的标题”和项目,我在其下有“我的标题”,另一个“我的标题”,并且项目在该标题下。 此时重新打开它会添加第三个标题。 如果我切换到不同的项目来源,则在此发生相同的事情,似乎还记得每个来源有多少重复。

请注意,我绝对不会在任何时候更改源集合的内容。在各个阶段对其进行序列化将产生完全相同的文件。为了配合使用,标题只是从数据中的字符串值创建的;我什至不知道这怎么可能导致任何递归,但显然可以。

如果不再使用重新创建窗口而不是重新使用它并在显示它时更新绑定,就不再出现此问题,相反,打开带有其他项目源的窗口现在将显示完全没有组标题的项目。

我尝试查找任何类似的问题,但无济于事,而且我是WPF的新手,所以我还不熟悉其工作原理。

以下是两种状态下的窗口的屏幕截图,以及视觉树和其中的标题:

First time opening the window, only one header

Second time opening the window, duplicated header

我确实找到了this seemingly not-that-related question,随后尝试使用CollectionViewSource,但我也无法使它正常工作-它显示的超级组运行正常,但在此之下发生了完全相同的现象。

这是ListView的XAML代码:

<ListView
    x:Name="lvComponents" Grid.Row="1"
    ItemsSource="{Binding ScriptComponents}"
    SelectionChanged="LvComponents_SelectionChanged"
    lvl:ListViewLayoutManager.Enabled ="True"
    IsSynchronizedWithCurrentItem="True"
    externals:GridViewSort.AutoSort="True"
    externals:GridViewSort.SortGlyphAscending="/Resources/Program Icons/Sort Up.png"
    externals:GridViewSort.SortGlyphDescending="/Resources/Program Icons/Sort Down.png">

    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="Height" Value="36" />
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>
            <GridViewColumn lvl:FixedColumn.Width="36">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <Image Source="{Binding Path=., Converter={StaticResource ComponentToIconPathConverter}}" Width="32"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Header="Name" lvl:ProportionalColumn.Width="1" externals:GridViewSort.PropertyName="Name">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <ctl:EditableTextBlock Text="{Binding Name}"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Header="Type" lvl:ProportionalColumn.Width="1" externals:GridViewSort.PropertyName="Type">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Type}"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>

    <ListView.GroupStyle>
        <GroupStyle>
            <GroupStyle.ContainerStyle>
                <Style TargetType="{x:Type GroupItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <Expander IsExpanded="True" x:Name="xpComponents">
                                    <Expander.Header>
                                        <StackPanel Orientation="Horizontal">
                                            <Image Source="{Binding Name, Converter={StaticResource StringToProgramIconPathConverter}}" Width="16" Margin="0,0,2,0"/>
                                            <TextBlock Text="{Binding Name}" FontWeight="Bold" FontSize="14" VerticalAlignment="Bottom" />
                                            <TextBlock Text=" (" FontSize="14" VerticalAlignment="Bottom" />
                                            <TextBlock Text="{Binding ItemCount}" FontSize="14" VerticalAlignment="Bottom" />
                                            <TextBlock Text=")" FontSize="14" VerticalAlignment="Bottom" />
                                        </StackPanel>
                                    </Expander.Header>
                                    <ItemsPresenter />
                                </Expander>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </GroupStyle.ContainerStyle>
        </GroupStyle>
    </ListView.GroupStyle>
</ListView>

对于引起这种情况甚至解决方法的任何想法,将不胜感激。

如果我可以重用窗口而不是重新创建窗口,那就更好了(现在这会导致在更改源时根本不显示标题),但是我会尽力而为。

先谢谢了。 =)

0 个答案:

没有答案