2014-11-03 1 views
0

Я использую прикрепленное поведение, чтобы добавить сортировку 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, когда он существует)?

+0

Вы можете попробовать * wait * для рендера ('Dispatcher.Invoke (..., DispatcherPriority.Render);'). Но я думаю, что сортировка имеет какое-то отношение к 'ListCollectionView', поэтому просто настроить сортировку будет достаточно. Как вы * очистите список? Вызов 'Clear()' чего? Возможно, вы случайно очищаете сортировку. – Sinatr

+0

Я очищаю список, вызывая Clear, сортировка не очищается - она ​​все еще существует, проблема заключается только в перекраске. – Giedrius

+1

Я разобрался, проблема была в том, что у GridViewSort было свойство SortedColumnHeaderProperty, которое содержало ссылку на отсортированный заголовок столбца. Поэтому, когда список будет очищен и будет заполнен снова, заголовки столбцов будут воссозданы и эта ссылка больше не будет использоваться в рендеринге. – Giedrius

ответ

0

Я разобрался, проблема была в том, что GridViewSort имел свойство SortedColumnHeaderProperty, которое содержало ссылку на отсортированный заголовок столбца.

Таким образом, когда список будет очищен и будет заполнен снова, заголовки столбцов будут воссозданы и эта ссылка больше не будет использоваться при визуализации.

Смежные вопросы