在listview上添加索引列

时间:2014-02-12 01:08:46

标签: c# wpf listview

我正在使用WPF,我有一个带有listview的窗口,该窗口绑定到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,因为集合中的项目可以删除或排序,我需要集合中的索引(如果集合被更改,则更新)。

我想找到一种方法向listview添加“索引列”,因此ObservableCollection中的Task索引将位于每行中的名称之前(见下文)。

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

感谢您的帮助!

2 个答案:

答案 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);

答案 1 :(得分:0)

据我所知,添加索引并不容易:(

如果我是你,我会在项目中添加一个属性,这将显示在您的列表视图中。该属性将由ViewModel填充并递增。但如果你排序或删除它应该重写。

您还可以尝试在ViewModel中创建一个属性,如:

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

并使用RelativeSource FindAncestor将其绑定到每个元素。但同样 - 它应该在collectionChange上刷新