我正在使用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
感谢您的帮助!
答案 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上刷新