2014-02-12 67 views
0

我正在使用WPF,我有一個窗口與綁定到ObservableCollection的列表視圖。在列表視圖上添加索引列

所以它看起來像這樣:

public ObservableCollection<Task> TaskList { get; set; } 

任務做模特

public class Task 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    .... 
} 

的ListView.ItemTemplate的XAML:

<ListView.ItemTemplate> 
    <DataTemplate> 
     <WrapPanel> 
     <TextBlock Text="{Binding Name}" /> 
     </WrapPanel> 
    </DataTemplate> 
</ListView.ItemTemplate> 

我不能使用的ID,因爲項目在集合中可以刪除或排序,我需要集合中的索引(如果集合獲得更新,則使用更新改變)。

我想找到一種方法來添加一個「索引列」到列表視圖,所以ObservableCollection中任務的索引將位於每行的名稱之前(見下文)。

| 0任務
| 1 TaskTest
| 2 OtherTask
| 3 LastTask

感謝您的幫助!

回答

0

據我知道這不是那麼容易添加索引: (

如果我是你,我會添加一個屬性項,這是顯示在你的列表視圖。該屬性將被ViewModel填充並遞增。但如果你排序或刪除它應該被重寫。

您也可以嘗試讓你的視圖模型中的屬性,如:

private int counter; 
public int Index 
{ 
    get 
    { 
     counter++; 
     return counter; 
    } 
} 

並將其綁定到使用的RelativeSource FindAncestor每個元素。但再次 - 它應該刷新collectionChange

+0

不幸的是,這就是我認爲,沒有*魔術方式*做到這一點:(但謝謝你的答案,這就是我將使用。 –

0

試試這個,箱子視圖模型

public class TaskViewModel : Task 
{ 
    private int _Index; 

    public int Index 
    { 
     get { return _Index; } 
     set { _Index = value; } 
    } 
} 

ItemTemplate:它

<ListView.ItemTemplate> 
    <DataTemplate> 
     <WrapPanel Orientation="Horizontal"> 
      <TextBlock Text="{Binding Index}" Width="Auto" Height="Auto" Margin="0,0,4,0"/> 
      <TextBlock Text="{Binding Name}" Width="Auto" Height="Auto"/> 
    </WrapPanel> 
</ListView.ItemTemplate> 

後面的代碼:

TaskViewModel vm = new TaskViewModel(); 
vm.Id = 0; 
vm.Index = 1; 
vm.Name = "sad"; 
TaskList.Add(vm);