如何填充 LongListSelector

3

我正在学习C# Windows Phone 8开发,并尝试编写一个使用LongListSelector的应用程序。该应用程序将显示一长串火车站名称。

我查看了一些在线示例,包括MSDN PeopleHub和PhotoHub示例,但它们似乎非常复杂。我采用了PeopleHub示例,并对其进行了一些修改,直到它能够在LongListSelector中显示车站列表,但我无法找出哪个项目已在列表中被选中。当传递到另一页时,SelectedItem属性仅返回应用程序名称而不是所选项目。

我认为我需要一个基本示例,以向LongListSelector添加一些项目,然后找到并传递所选项目到另一页。我不完全理解控件的工作原理,是否必须使用某种DataBinding来填充LongListSelector或者它更简单,如:

LongListSelectorThing.add("trainstationA");
LongListSelectorThing.add("trainstationB");
LongListSelectorThing.add("trainstationC");

有人能给我一些简单的基本指针,告诉我如何填充此控件并找出用户选择了哪个项目吗?当我说他们选择了哪个项目时,当LongListSelector网格出现时,例如,他们点击A,然后它会显示以A开头的事物列表,然后他们点击trainstationA,我想能够检测到他们选择了trainstationA并将该信息传递给另一页,以便我可以显示更多关于它的信息。

很抱歉,如果这似乎很基础,我还很新手。

谢谢!

1个回答

12

这里是一个基本的例子,可以帮助您理解: 首先,在您的页面(xaml文件)中定义LongListSelector(LLS)控件:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <phone:LongListSelector Name="myLLS" Margin="0">
        <phone:LongListSelector.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}"/>
            </DataTemplate>
        </phone:LongListSelector.ItemTemplate>
    </phone:LongListSelector>
</Grid>

您还需要声明它的项(Items)将是什么样子。它可以是任何UIElement - 按钮、图像、网格等等。在上面的代码中,我声明我的Item将是一个TextBlock,它的内容(文本)已绑定到一个名为“Name”的属性。我也给LLS(LongListSelector)取了一个名字,以便稍后可以引用它。

在Page.cs代码中填充LLS。让我们创建一个简单的Station类,并填充LLS:

public class Station
{
  private string _stationName;

  public string Name
  {
     get { return _stationName; }
     set { _stationName = value; }
  }

  public Station(string station)
  {
     this.Name = station;
  }
}

public partial class MainPage : PhoneApplicationPage
{
  ObservableCollection<Station> trainStations = new ObservableCollection<Station>();

  public MainPage()
  {
     InitializeComponent();

     myLLS.ItemsSource = trainStations;

     trainStations.Add(new Station("Germany"));
     trainStations.Add(new Station("France"));
     trainStations.Add(new Station("Italy"));
  }
}

重要的事情是:

  • 查看我的Station类中是否有一个名为'Name'的属性 - 这是TextBlock内容绑定的属性。
  • 我创建了一个ObservableCollection,它是我的Stations的集合 - 它类似于List,但当添加或删除新项时,PropertyChanged事件被引发,因此当你添加新站点时,你的LongListSelector可以自动更新。
  • 我将创建的集合分配给了myLLS.ItemsSource - 这意味着创建的LLS将用作项目的填充(在xaml中描述为DataTemplate),而这些项目的源就是该集合。

希望这可以帮助到您。祝编码愉快。


然而,我发现了几行简单的代码,让我可以填充一个基本的长列表选择器,但我不知道如何将这些东西分组到跳转列表中(它通过名称的第一个字母等将这些东西分组,类似于手机中的通讯录)。我将车站列表添加到List<string> allStations = new List<string>();然后我只是使用completeStationList.ItemsSource = allStations;这将所有车站添加到列表中,但我需要按第一个单词的第一个字母进行分组。有没有简单的方法可以做到这一点? - irldev
你的数据必须使用一个键进行分组,并且这些分组与LLS绑定。在这里,您可以找到如何执行此操作的良好描述:http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj244365(v=vs.105).aspx 这里还有一个可行的示例:http://code.msdn.microsoft.com/wpapps/PeopleHub-Windows-Phone-80-88abe94d - Romasz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接