【问题标题】:How to populate LongListSelector如何填充 LongListSelector
【发布时间】:2013-11-30 13:35:50
【问题描述】:

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

我一直在网上查看一些示例,包括 MSDN PeopleHub 和 PhotoHub 示例,但它们看起来非常复杂。我拿了 PeopleHub 样本并对其进行了一些修改,直到我让它在 LongListSelector 中显示电台列表,但我无法找出在列表中选择了哪个项目。 SelectedItem 属性在传递到另一个页面时只是返回应用名称,而不是在列表中选择了哪个项目。

我想我需要一个基本示例,说明如何将一些项目添加到 LongListSelector,然后查找并将所选项目传递到另一个页面。我不完全理解控件的工作原理,如果您必须使用某种带有 LongListSelector 的 DataBinding 来填充它,或者它是否更简单,例如:

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

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

对不起,如果这看起来很基本,我对此很陌生。

谢谢!

【问题讨论】:

    标签: c# windows-phone-8 grid windows-phone longlistselector


    【解决方案1】:

    这是一个基本示例,应该可以帮助您理解: 首先在您的页面(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>
    

    您还可以声明其项目的外观。它可以是任何 UIElement - 按钮、图像、网格等。在上面的代码中,我声明我的项目将是一个 TextBlock,我将其内容(文本)绑定到属性“名称”。我还给 LLS 起了一个名字,以后可以参考。

    在 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),并且该项目的来源就是该集合。

    希望这会有所帮助。编码愉快。

    【讨论】:

    • 谢谢。但是我发现了几行简单的代码,可以让我填充一个基本的 longlistselector,但我不知道如何将这些东西分组到一个跳转列表中(它通过名称的第一个字母等对这些东西进行分组,类似于你的地址电话预约)。我将电台列表添加到 List allStations = new List();然后我只使用了 completeStationList.ItemsSource = allStations;这会将所有电台添加到列表中,但我需要将它们按第一个单词的第一个字母分组。有没有简单的方法可以做到这一点?
    • 您的数据必须使用键进行分组,并且这些组绑定到 LLS。在这里你有一个很好的描述如何做到这一点:msdn.microsoft.com/en-us/library/windowsphone/develop/… 这是另一个工作示例:code.msdn.microsoft.com/wpapps/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 2013-04-16
    • 1970-01-01
    • 2012-06-26
    • 2020-01-30
    • 1970-01-01
    相关资源
    最近更新 更多