2014-11-03 28 views
0

我使用附加的行为增加从这里排序,以GridView的列后:http://www.thomaslevesque.com/2009/08/04/wpf-automatically-sort-a-gridview-continued/失去装饰器层的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,我想它尚未呈现,没有装饰层尚未。

问题是,如何抓住正确的时刻重画缺失的字形(或者在装饰层存在时)?

+0

您可以尝试*等待渲染('Dispatcher.Invoke(...,DispatcherPriority.Render);')。但我认为排序与'ListCollectionView'本身有关,所以简单地设置排序就足够了。你如何清除*清单?通过调用Clear()来做什么?也许你不小心清理排序。 – Sinatr 2014-11-03 11:03:31

+0

我通过调用清除清除列表,排序不清除 - 它仍然存在,问题只与重新绘制。 – Giedrius 2014-11-03 11:08:40

+1

我已经整理出来了,问题是,GridViewSort有属性SortedColumnHeaderProperty,它持有对已排序列标题的引用。所以当列表被清除并且会被再次填充时,列标题被重新创建,并且该引用不再用于渲染。 – Giedrius 2014-11-03 11:16:59

回答

0

我已经整理出来了,问题是,那GridViewSort有财产SortedColumnHeaderProperty哪些持有引用排序的列标题。

因此,当清单将被清除并再次填充时,列头被重新创建,并且该引用不再用于渲染。