我有一个ListView,其中包含组和组标题,这是我基于某个WPF tutorial编写的。
这可以正常工作,但如果我关闭它所在的窗口,然后通过重新创建它来重新打开它(创建一个新示例),那么所有的标题都会被复制。IidoEe.而不是有"我的标题"和它下面的项目,我有"我的标题",它下面的另一个"我的标题",项目在那个下面。在那个点重新打开它会添加第三个标题。如果我切换到不同的项目源,同样的事情也发生在那里,它似乎记得每个来源有多少重复。
请注意,我在任何时候都绝对不会对源集合的内容进行任何更改。在各个阶段对它进行序列化将生成完全相同的文件。我甚至不知道这怎么会导致递归,但很明显它会。
如果我没有重新创建窗口,而是重用它并在显示时更新绑定,则此问题不再发生,但相反,使用不同的项源打开窗口,现在显示的项根本没有组标题。
我试着查找任何类似的问题,但无济于事,我是新的WPF,所以我还不熟悉它的工作。
以下是窗口在两种状态下的屏幕截图,以及其中的可视树和标题:
我确实找到了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>
任何想法的原因,甚至为变通办法,将不胜感激。
如果我能重用窗口而不是重新创建它(现在导致在更改源时标题根本不显示),那就更好了,但我会尽我所能。
感谢提前.=)
1条答案
按热度按时间eivnm1vs1#
我找到了一个解决办法。如果我用
然后标头显示多次。但如果我使用
对我来说很好用