2014-02-25 67 views
0

我有datagrid綁定了一個ICollectionView列表對象。基本上,行是基於一列中的值進行過濾的。現在每行都有一個索引列。這基本上是行號。由於行被過濾,所以行號改變。如何處理這個?wpf datagrid行中的行號

基本上DataGrid綁定到一個類對象列表。

Class city 
{ 
    Int Index; 
    String Name; 
    string location; 
    } 

List<city> Cities; 

當我創建對象時,索引具有根據索引中項目數量的值。所以第一個對象的索引= 0,第二個索引的索引= 1,依此類推。索引是網格中的一列。現在讓我們說我有2個對象迪拜。和一個與開羅(第三個對象,索引= 3)。當我選擇開羅只有該行將被顯示。但是因爲我之前添加了索引,所以索引號= 3,因爲在過濾器之後只有一行,所以我希望它是1。

+0

請張貼一些代碼,以方便我們在幫助你。 這聽起來像你正在重建索引_AFTER_應用過濾器,這是導致問題? –

+0

增加了幾個更多的描述請檢查。 – user1687824

+0

你對這個'Index'屬性做了什麼修改?它是業務邏輯的一部分,還是您在View中爲顯示目的創建的?如果只是爲了顯示看看實施'AlternationIndex' – CarbineCoder

回答

0

通常需要做的是先設置索引的值,然後應用過濾器。

包括System.Linq的命名空間,並添加以下

cities = cities.Select((item, index) => 
     new city() 
     { 
      Index = index, 
      Name = item.Name, 
      location = item.location 
     }); 

這將帶回城市,第一個指標是零的列表。如果你想讓它從一開始簡單地將其更改爲:

cities = cities.Select((item, index) => 
     new city() 
     { 
      Index = index + 1, 
      Name = item.Name, 
      location = item.location 
     }); 

在此之後已經完成,你應該申請您的過濾器,除非你正在改變其值不應被覆蓋。

2

當您想顯示行索引時,您可以使用AlternationIndex。當您使用AlternationIndex時,有兩件事很重要:

  • 設置爲控制的AlternationCount。這就像AlternationIndex的計數限制,之後如果你的元素數量超過了這個數量,它將從0重新開始。理想情況下,您可以將它綁定到Count Of Items,如果您不希望它從0重新啓動
  • Binding AlternationIndex注意源代碼。對於列表框將是{RelativeSource AncestorType=ListBoxItem}對其他人而言可能是{RelativeSource Mode=TemplatedParent}

試試下面這個示例:

<ListBox Name="CityListBox" AlterationCount={Binding CountOfItems} 
    <ListBox.ItemTemplate> 
     <DataTemplate DataType="City"> 
      <TextBlock> 
        <Run Text="{Binding Name}"></Run> 
        <Run Text=" : "></Run> 
        <Run Text="{Binding Country}"></Run> 
        <Run Text=" : "></Run> 
        <Run Text="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem}, 
           Path=(ItemsControl.AlternationIndex), Mode=OneWay}"></Run> 
      </TextBlock> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

輸出

CityA : CountryA : 0 
CityB : CountryB : 1 
CityC : CountryC : 2 
+0

我會嘗試這..謝謝回覆! – user1687824