2014-02-21 6 views
1

У меня проблема, и я понятия не имею, что делать. Я пытаюсь сделать простой список рекордов, и мне нужно получить номера (1,2,3,4 ...) для каждого балла.Добавление номеров строк Windows phone 7 listbox

XAML:

<ListBox x:Name="ListBox" ItemsSource="{Binding Source.View}"> 
         <ListBox.ItemTemplate> 
          <DataTemplate> 
           <StackPanel Orientation="Horizontal"> 
            <TextBlock Text="{Binding ROW_NUMBER_HERE}"/> 
            <TextBlock Text="{Binding Name}"/> 
            <TextBlock Text="{Binding Score}"/> 
           </StackPanel> 
          </DataTemplate> 
         </ListBox.ItemTemplate> 
</ListBox> 

C#

public ObservableCollection<Item> Items { get; set; } 
public System.Windows.Data.CollectionViewSource Source { get; set; } 

     public HighscorePage() 
     { 
      IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication(); 

      if (store.FileExists("highscores")) 
      { 
       using (IsolatedStorageFileStream stream = store.OpenFile("highscores", FileMode.Open)) 
       { 
        var serializer = new DataContractSerializer(typeof(ObservableCollection<Item>)); 
         Items = (ObservableCollection<Item>)serializer.ReadObject(stream); 
       } 
      } 
      if (Items != null) 
      { 
       Source = new System.Windows.Data.CollectionViewSource(); 
       Source.Source = Items; 
       Source.SortDescriptions.Add(new SortDescription("Score", ListSortDirection.Descending)); 
      } 

      InitializeComponent(); 
      DataContext = this; 
     } 

Это товары ObservableCollection содержит имя и оценка данных.

Я попытался использовать обычный цикл while для добавления чисел без успеха. И я не мог заставить AlternationCount работать. Поддерживается ли она даже в wp7? Есть идеи?

Спасибо!

ответ

1

Используя расширение Select, чтобы выполнить подсчет и новый класс, связанный с ним, это можно сделать, создав альтернативный список с помощью рядовых пользователей. Вот как это делается:

Создайте расширенный класс предметов (ItemsEx), который имеет одно дополнительное свойство, которое является int для RowNumber. Также есть конструктор копирования, который принимает Item и копирует действительную информацию в клон.

Есть наблюдаемую коллекцию ItemsEx (ы) и хранить старые (если это необходимо в списке):

public List<Item> Items { get; set; }      // Original 
public ObservableCollection<ItemEx> Items2 { get; set; } // Changed to hold the RowNumber 

Если у вас есть элементы из изолированного хранилища создавать экземпляры ItemsEx такие как

var itemsToBePlaceInCollection 
     = Items.Select((itm, index) => new ItemEx(itm) { RowNumber = index + 1; }) 
       .ToList(); 
       .ForEach(itmEx => Items2.Add(itmEx)); // Add into the observable collection at this point 

Затем в Xaml DataContext устанавливается значение Items2, и шаблон связывается с RowNumber с элементом ItemEx, который будет отображать счетчик из хранилища, и вы получите номера строк.


Откровенно его неясно, почему вам нужен ObservableCollection, если список не добавляются динамически. Если это не так, просто создать новый список «на лету» с помощью INotifyPropertyChanged будет так же эффективно, как и ObservableCollection.

+0

Благодарим вас за ответ. Мне нравится эта идея, чтобы создать новый список с номерами, но в моем случае я не уверен, могу ли я это сделать. Ну, я использую наблюдаемый набор, потому что мне нужно сортировать список по баллам, и после этого мне нужно добавить эти «номера строк». И на самом деле я использую этот же файл/список в двух разных списках, отсортированных по уровню игрока (простой, обычный). Еще один список включает «легкие» оценки уровня и еще один «нормальный» уровень. Но давайте держать это просто :) Возможно, я мог бы открыть данные, отсортировать и отфильтровать их, а после этого поместить их номерами строк в два разных списка. Я попробую! Благодаря! – Arnoho

+0

@Arnoho, если ничего другого, использующего расширенный класс для ваших данных, который говорит с различными потребностями представления, является хорошим местом для начала. – OmegaMan

+0

Прошу прощения, но я не понимаю, что вы имеете в виду?

Простейший способ решить мою проблему - добавить числа 1,2,3,4,5 ..., n для каждого элемента LISTBOX, а не для моего элемента данных.
Элементы данных сортируются по счету игрока, а при загрузке страницы рекорда они переходят в список. Вот почему это число нужно дать, когда система загружает элементы списка в xaml.
Я действительно не знаю, как это объяснить, но мне не нужно сохранять это число в data.Only цель показать его в списке.
Так список будет выглядеть следующим образом:
1. игроком 200p
2. Player2 10p
3. player3 0p
... и так далее. – Arnoho

Смежные вопросы