Я использую прикрепленное поведение, чтобы добавить сортировку GridView столбцов здесь: http://www.thomaslevesque.com/2009/08/04/wpf-automatically-sort-a-gridview-continued/Потеря Adorner слоя после того, как ListView не был предметов
Это работает нормально, если я не использую следующий код:
<ListView.Style>
<Style TargetType="ListView">
<Style.Triggers>
<Trigger Property="HasItems" Value="False">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListView">
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</ListView.Style>
появляется
проблемы, с помощью этой последовательности шагов:
1) список с элементами заполнения, нажмите на заголовок для сортировки, сортировка глифа появляется
2) очистить список
3) заполнить список снова, сортировка глифа не видно
Я подписался на событие SizeChanged в приложенном поведении, чтобы уловить момент, когда список переходит из пустого в полный, чтобы перерисовать сортировку глифа, но GetAdornerLayer (columnHeader) возвращает null, я думаю, он еще не отображен и не имеет слой adorner еще.
Вопрос в том, как поймать правильный момент, чтобы перерисовать отсутствующий глиф (или получить слой adorner, когда он существует)?
Вы можете попробовать * wait * для рендера ('Dispatcher.Invoke (..., DispatcherPriority.Render);'). Но я думаю, что сортировка имеет какое-то отношение к 'ListCollectionView', поэтому просто настроить сортировку будет достаточно. Как вы * очистите список? Вызов 'Clear()' чего? Возможно, вы случайно очищаете сортировку. – Sinatr
Я очищаю список, вызывая Clear, сортировка не очищается - она все еще существует, проблема заключается только в перекраске. – Giedrius
Я разобрался, проблема была в том, что у GridViewSort было свойство SortedColumnHeaderProperty, которое содержало ссылку на отсортированный заголовок столбца. Поэтому, когда список будет очищен и будет заполнен снова, заголовки столбцов будут воссозданы и эта ссылка больше не будет использоваться в рендеринге. – Giedrius