2014-02-12 2 views
0

Я использую WPF, у меня есть окно со списком, связанное с ObservableCollection.Добавить столбец столбца в listview

Так это выглядит следующим образом:

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

Задача быть моделью

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

Часть XAML из ListView.ItemTemplate:

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

Я не могу использовать Id, потому что пункты в коллекции можно удалить или отсортировать, мне нужен индекс в коллекции (с обновлением, если коллекция изменено).

Я хотел бы найти способ добавить «индексный столбец» в список, поэтому индекс задачи в ObservableCollection будет перед именем в каждой строке (см. Ниже).

| 0 Задача
| 1 TaskTest
| 2 OtherTask
| 3 LastTask

Спасибо за помощь!

ответ

0

Насколько я знаю, что это не так просто, чтобы добавить индекс: (

Если бы я был вами, я добавлю свойство к элементу, которое показано в вашем списке. Это свойство будет заполнено ViewModel и увеличено. Но если вы сортируете или удаляете его, его следует переписать.

Вы также можете попробовать сделать свойство внутри вашей 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); 
Смежные вопросы