3

Проект WinPhone 8 в C#. Я пытаюсь заполнить сгруппированный список. Заголовки групп появляются, элементы нет. Соответствующий код:Сгруппированный LongListSelector: отображаются заголовки, элементы не

class MyPage 
{ 
    public class Group : IGrouping<string, string> 
    { 
     public string Title{get;set;} 
     public string[] Items; 

     public string Key 
     { 
      get { return Title; } 
     } 

     public IEnumerator<string> GetEnumerator() 
     { 
      return (Items as IEnumerable<string>).GetEnumerator(); 
     } 

     System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() 
     { 
      return Items.GetEnumerator(); 
     } 
    } 

    private Group[] m_ItemGroups = 
     { 
      new Group(){Title = "A", Items = new string[] {"A", "ASA"}}, 
      new Group(){Title = "X", Items = new string[] {"X", "XX"}}, 
     }; 

    private void OnLoaded(object sender, RoutedEventArgs e) 
    { 
     TheList.ItemsSource = m_ItemGroups; 
    } 
} 

И XAML:

<phone:LongListSelector 
     x:Name="TheList" 
     Grid.Row="1" 
     IsGroupingEnabled="True" 
     SelectionChanged="OnSelChanged" 
     > 

     <phone:LongListSelector.GroupHeaderTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Title}" 
        Style="{StaticResource PhoneTextGroupHeaderStyle}" 
        Foreground="{StaticResource PhoneForegroundBrush}" /> 
      </DataTemplate> 
     </phone:LongListSelector.GroupHeaderTemplate> 

     <phone:LongListSelector.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Margin="0,0,0,17" Width="432" Orientation="Horizontal"> 
        <TextBlock Text="Hello world" TextWrapping="Wrap" Width="345"/> 
       </StackPanel> 

      </DataTemplate> 
     </phone:LongListSelector.ItemTemplate> 

    </phone:LongListSelector> 

Ни из GetEnumerator() методов не называется. Также не вызывается геттер Key. Похоже, что список не распознает мой класс Group как набор строк, который он есть. Пожалуйста, что здесь не так?

Элемент шаблона в порядке. Когда я меняю список на негруппированный, я вижу два элемента с фиктивным текстом.

Замена string, поскольку тип элемента с пользовательским классом не помогает.

ответ

1

Похоже, LongListSelector ожидает, что в сгруппированном режиме объекты в наборе инструментов ItemsSourceSystem.Collections.IList (нетипизированный). Простой IEnumerator не будет делать.

Желаю, чтобы это было задокументировано. До сих пор WP8 SDK документировал большое время.

+0

У меня такая же проблема прямо сейчас. Не могли бы вы опубликовать свою реализацию IList? –

+0

Я использовал ObservableCollection ObservableCollections в конце концов. Не реализовал IList вручную. –

+0

@SevaAlekseyev У меня такая же проблема, можете ли вы помочь мне на этом http://stackoverflow.com/questions/21986760/binding-data-in-longlistselector – user2056563

5

Seva верен, Microsoft изменила требование типа для того, что вы назначили ItemsSourceLongListSelector в групповом режиме.

Вам нужно преобразовать любой класс, который вы используете, чтобы сгруппировать свои предметы из унаследовавшего IEnumerable<T>, чтобы просто наследовать List<T>.

См here for full description of answer

Это довольно просто на самом деле, это то, что пример класса группы можно использовать с КР8 LongListSelector будет выглядеть так:

public class Group<T> : List<T> 
{ 
    public Group(char name, IEnumerable<T> items) : base(items) 
    { 
     this.Letter = name; 

    } 



    public char Letter 
    { 
     get; 
     set; 
    } 


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