C#中的WinPhone 8项目。我正在尝试填充分组列表。显示组标题,但项目不显示。相关代码是:
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
getter。看起来列表不能将我的Group
类识别为字符串集合。拜托,这里有什么问题?
项目模板很好。当我将列表更改为非分组时,我会看到两个带有虚拟文本的项目。
使用自定义类替换string
作为项类型无效。
答案 0 :(得分:5)
Seva是正确的,Microsoft更改了您在分组模式下分配给ItemsSource
的{{1}}的类型要求。
您需要将您正在使用的任何类别转换为将项目从继承LongListSelector
分组为仅继承IEnumerable<T>
。
请参阅here for full description of answer
实际上非常简单,这就是你可以使用 WP8 LongListSelector的Group类的示例:
List<T>
答案 1 :(得分:1)
在LongListSelector
集合中,ItemsSource
看起来希望System.Collections.IList
集合中的对象实现IEnumerator
(无类型)。一个简单的{{1}}不会。
我希望有记录。到目前为止,WP8 SDK文档吸引了大量时间。