У меня есть ListView с группами и заголовками групп, которые я написал на основе определенного WPF-руководства .
Это работает правильно, но если я закрою окно, оно открывается и снова открываетсяэто путем воссоздания его (создания нового экземпляра), тогда все заголовки дублируются.Т.е. вместо того, чтобы иметь «Мой Заголовок» и элементы под ним, у меня есть «Мой Заголовок», другой «Мой Заголовок» под ним, и элементы находятся под этим.Повторное открытие в этот момент добавляет третий заголовок.Если я переключаюсь на другой источник предметов, там происходит то же самое, и кажется, что он помнит, сколько повторений имеет каждый источник.
Обратите внимание, что я абсолютно не изменяю содержимое коллекции источников в любой точке,Сериализация его на разных этапах дает один и тот же файл.Чтобы быть с, заголовки создаются только из строкового значения в данных;Я даже не знаю, как это может вызвать какую-либо рекурсию, но все же ясно, что это так.
Если вместо того, чтобы воссоздать окно, я повторно использую его и обновлю привязку при его отображении, эта проблема больше не возникает, а наоборотпри открытии окна с другим источником элементов теперь отображаются элементы без групповых заголовков.
Я пытался найти любую подобную проблему, но безрезультатно, и я новичок в WPF, поэтому я еще неразбираюсь в его работе.
Вот скриншоты окна в обоих состояниях, вместе с визуальным деревом и заголовками в нем:
Я нашел этот, казалось бы, не связанный с этим вопрос и впоследствии попытался использовать CollectionViewSource
, но я не смог его получитьработать правильно - супергруппа, которую она показала, вела себя правильно, но под ней происходили точно такие же явления.
Вот код XAML для ListView:
<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>
Любые идеи дляпричина этого, или даже для работыраунд, будет принята с благодарностью.
Было бы еще лучше, если бы я мог использовать окно вместо того, чтобы воссоздавать его (что теперь приводит к тому, что заголовки вообще не отображаются при смене источников), но я возьмучто я могу получить.
Заранее спасибо.=)