了解如何使用数据填充ListView。
让我们知道你对此的感受
ListView用于显示数据列表。我们将了解如何使用数据填充ListView,以及如何绑定到所选项目。
ListView使用ItemsSource
属性填充数据,该属性可以接受任何实现的集合IEnumerable
。填充的最简单的方式ListView
涉及使用字符串数组:
var listView = new ListView();
listView.ItemsSource = new string[]{
"mono",
"monodroid",
"monotouch",
"monorail",
"monodevelop",
"monotone",
"monopoly",
"monomodal",
"mononucleosis"
};
//monochrome will not appear in the list because it was added
//after the list was populated.
listView.ItemsSource.Add("monochrome");
上面的方法将填充ListView
一个字符串列表。默认情况下,ListView
将为每行调用ToString
并显示结果TextCell
。要自定义数据的显示方式,请参阅“ 单元格外观”。
因为ItemsSource
已经发送到一个数组,内容不会随着底层列表或数组的更改而更新。如果您希望ListView自动更新,因为在基础列表中添加,删除和更改项目,则需要使用ObservableCollection
。ObservableCollection
被定义在System.Collections.ObjectModel
和它是一样的List
,除了它可以通知ListView
任何更改:
ObservableCollection<Employees> employeeList = new ObservableCollection<Employess>();
listView.ItemsSource = employeeList;
//Mr. Mono will be added to the ListView because it uses an ObservableCollection
employeeList.Add(new Employee(){ DisplayName="Mr. Mono"});
数据绑定是将用户界面对象的属性与某些CLR对象的属性(如ViewModel中的类)绑定的“粘合”。数据绑定是有用的,因为它通过替代大量无聊的样板代码简化了用户界面的开发。
数据绑定的工作原理是保持对象同步,因为绑定值发生变化。每当控件的值发生变化时,不必编写事件处理程序,您就可以在ViewModel中建立绑定和启用绑定。
有关数据绑定的更多信息,请参阅数据绑定基础,这是Xamarin.Forms XAML基础知识文章系列的第四部分。
单元格(和单元格的子元素)的属性可以绑定到对象的属性ItemsSource
。例如,ListView可以用于呈现具有图像的员工列表。
员工类:
public class Employee{
public string DisplayName {get; set;}
}
ObservableCollection
被创建并设置为ListView
's ItemsSource
:
ObservableCollection<Employee> employees = new ObservableCollection<Employee>();
public EmployeeListPage()
{
//defined in XAML to follow
EmployeeView.ItemsSource = employees;
...
}
列表中填有数据:
public EmployeeListPage()
{
...
employees.Add(new Employee{ DisplayName="Rob Finnerty"});
employees.Add(new Employee{ DisplayName="Bill Wrestler"});
employees.Add(new Employee{ DisplayName="Dr. Geri-Beth Hooper"});
employees.Add(new Employee{ DisplayName="Dr. Keith Joyce-Purdy"});
employees.Add(new Employee{ DisplayName="Sheri Spruce"});
employees.Add(new Employee{ DisplayName="Burt Indybrick"});
}
以下代码段演示了ListView
绑定到员工列表:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:constants="clr-namespace:XamarinFormsSample;assembly=XamarinFormsXamlSample"
x:Class="XamarinFormsXamlSample.Views.EmployeeListPage"
Title="Employee List">
<ListView x:Name="EmployeeView">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding DisplayName}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
请注意,为了简单起见,绑定是在代码中设置的,尽管它可能已被绑定到XAML中。
XAML的前一位定义了一个ContentPage
包含一个ListView
。ListView
通过ItemsSource
属性设置数据源。元素中ItemsSource
定义了每一行的布局ListView.ItemTemplate
。
这是结果:
通常,您需要绑定到所选项目ListView
,而不是使用事件处理程序来响应更改。要在XAML中执行此操作,请绑定SelectedItem
属性:
<ListView x:Name="listView"
SelectedItem="{Binding Source={x:Reference SomeLabel},
Path=Text}">
…
</ListView>
假设listView
的ItemsSource
是一个字符串列表,SomeLabel
将其text属性绑定SelectedItem
。