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,我想它尚未呈现,没有装饰层尚未。
问题是,如何抓住正确的时刻重画缺失的字形(或者在装饰层存在时)?
您可以尝试*等待渲染('Dispatcher.Invoke(...,DispatcherPriority.Render);')。但我认为排序与'ListCollectionView'本身有关,所以简单地设置排序就足够了。你如何清除*清单?通过调用Clear()来做什么?也许你不小心清理排序。 – Sinatr 2014-11-03 11:03:31
我通过调用清除清除列表,排序不清除 - 它仍然存在,问题只与重新绘制。 – Giedrius 2014-11-03 11:08:40
我已经整理出来了,问题是,GridViewSort有属性SortedColumnHeaderProperty,它持有对已排序列标题的引用。所以当列表被清除并且会被再次填充时,列标题被重新创建,并且该引用不再用于渲染。 – Giedrius 2014-11-03 11:16:59