2014-11-03 29 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哪些持有引用排序的列標題。

因此,當清單將被清除並再次填充時,列頭被重新創建,並且該引用不再用於渲染。