将数据绑定到列表视图并隐藏字段

时间:2017-09-18 17:49:57

标签: xamarin.forms

我在页面的.cs文件的构造函数中有以下代码。我能够拉 数据没有问题

    void  InitData()
            {
                ArticlesService objArtServ = new ArticlesService();
                Task<List<ArticlesModel>> dataRetrieved =  objArtServ.GetValues("News");

                //Bind headlines and Id to listview but hide Id
                // datalist.itemsource =  ? 

            }

这是为我返回数据而没有任何问题的服务。

    public class ArticlesService
        {
            HttpClient client;

            public async Task<List<ArticlesModel>>  GetValues(string category){
                client = new HttpClient();
                var response = await client.GetStringAsync("http://testing-dev.com/Api/Articles/DefaultArticles/" + category);
                var articlesModel = JsonConvert.DeserializeObject<List<ArticlesModel>>(response);
                return articlesModel;
            }

        }

我在这个主页面上有一个网格和一个列表视图,它将列出我的模型和Id的标题。 id将被隐藏 并且不会显示在列表中。 这是下面的代码

     <StackLayout Grid.Column="1" Orientation="Vertical" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" Padding="0" Spacing="0">
                        <SearchBar x:Name="searchBar" Placeholder="Search" SearchCommandParameter="{Binding Source={x:Reference searchBar}, Path=Text}"/>
                        <StackLayout VerticalOptions="FillAndExpand">
                            <StackLayout VerticalOptions="FillAndExpand" Padding="1" BackgroundColor="Black">
                                <ListView x:Name="dataList"  BackgroundColor="White">
                                    <ListView.ItemTemplate>
                                        <DataTemplate>
                                            <ViewCell>
                                                <Label FontSize="20" VerticalOptions="CenterAndExpand" TextColor="Black" Text="{Binding HeadLines}"></Label>
                                            </ViewCell>
                                        </DataTemplate>
                                    </ListView.ItemTemplate>
                                </ListView>
                            </StackLayout>
                        </StackLayout>
                    </StackLayout>

这是我正在使用的模型

    public class ArticlesModel
        {
            public Int32 Id { get; set; }
            public string HeadLines { get; set; }
            public string Url { get; set; }
            public string Category { get; set; }
            public string Summary { get; set; }
        }

问题

  1. 如何仅将HeadLines和Id绑定到我的列表视图,以便我的ID将被隐藏,但标题将显示在列表视图中

  2. 点击列表视图中的每一行,我希望能够传递相关的ID,以便我可以使用Id查询我的列表以查找其他内容。 我如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

如果您没有显示ID,则无需绑定该ID。 ItemSelected事件将为您触发的行传递完整的ArticlesModel对象,您可以轻松地从模型中获取ID。

dataList.ItemSelected += (s,e) {

  if (e.SelectedItem == null) return;

  // item will be a pointer to the selected ArticlesModel object
  var item = (ArticlesModel)e.SelectedItem;

  // then you can use item.Id or any other property on ArticlesModel
};