Aracılığıyla paylaş


ListView Veri Kaynakları

, Xamarin.FormsListView veri listelerini görüntülemek için kullanılır. Bu makalede, bir ListView öğesinin verilerle nasıl doldurulacağını ve seçilen öğeye nasıl veri bağlanacağınız açıklanır.

ItemsSource

, ListView özelliğini kullanan ItemsSource verilerle doldurulur ve bunu uygulayan IEnumerableherhangi bir koleksiyonu kabul edebilir. 'yi doldurmanın ListView en basit yolu bir dize dizisi kullanmaktır:

<ListView>
      <ListView.ItemsSource>
          <x:Array Type="{x:Type x:String}">
            <x:String>mono</x:String>
            <x:String>monodroid</x:String>
            <x:String>monotouch</x:String>
            <x:String>monorail</x:String>
            <x:String>monodevelop</x:String>
            <x:String>monotone</x:String>
            <x:String>monopoly</x:String>
            <x:String>monomodal</x:String>
            <x:String>mononucleosis</x:String>
          </x:Array>
      </ListView.ItemsSource>
</ListView>

Eşdeğer C# kodu:

var listView = new ListView();
listView.ItemsSource = new string[]
{
  "mono",
  "monodroid",
  "monotouch",
  "monorail",
  "monodevelop",
  "monotone",
  "monopoly",
  "monomodal",
  "mononucleosis"
};

Dize listesini görüntüleyen ListView

Bu yaklaşım, öğesini ListView bir dize listesiyle doldurur. Varsayılan olarak, ListView her satır için bir çağrısı ToString yapıp sonucu TextCell görüntüler. Verilerin görüntülenme biçimini özelleştirmek için bkz . Hücre Görünümü.

Bir ItemsSource diziye gönderildiğinden, temel alınan liste veya dizi değiştikçe içerik güncelleştirilmeyecek. ListView'un, temel alınan listede öğeler eklendikçe, kaldırıldıkçe ve değiştikçe otomatik olarak güncelleştirilmesini istiyorsanız, bir ObservableCollectionkullanmanız gerekir. ObservableCollection içinde tanımlanır System.Collections.ObjectModel ve benzeridir List, ancak herhangi bir değişikliği bildirebilir ListView :

ObservableCollection<Employee> employees = new ObservableCollection<Employee>();
listView.ItemsSource = employees;

//Mr. Mono will be added to the ListView because it uses an ObservableCollection
employees.Add(new Employee(){ DisplayName="Mr. Mono"});

Veri Bağlama

Veri bağlama, kullanıcı arabirimi nesnesinin özelliklerini görünüm modelinizde bir sınıf gibi bazı CLR nesnesinin özelliklerine bağlayan "tutkal"dır. Veri bağlama, çok sayıda sıkıcı ortak kodu değiştirerek kullanıcı arabirimlerinin geliştirilmesini kolaylaştırdığından kullanışlıdır.

Veri bağlama, nesneleri ilişkili değerleri değiştikçe eşitlenmiş olarak tutarak çalışır. Denetimin değeri her değiştiğinde olay işleyicileri yazmak zorunda kalmak yerine bağlamayı oluşturur ve görünüm modelinizde bağlamayı etkinleştirirsiniz.

Veri bağlama hakkında daha fazla bilgi için bkz. XAML Temelleri makale serisinin Xamarin.Formsdördüncü bölümü olan Veri Bağlama Temelleri.

Hücreleri Bağlama

Hücrelerin özellikleri (ve hücrelerin alt öğeleri) içindeki nesnelerin özelliklerine ItemsSourcebağlanabilir. Örneğin, ListView bir çalışan listesi sunmak için kullanılabilir.

Çalışan sınıfı:

public class Employee
{
    public string DisplayName {get; set;}
}

oluşturulur ObservableCollection<Employee> , olarak ayarlanır ListView ItemsSourceve liste verilerle doldurulur:

ObservableCollection<Employee> employees = new ObservableCollection<Employee>();
public ObservableCollection<Employee> Employees { get { return employees; }}

public EmployeeListPage()
{
    EmployeeView.ItemsSource = employees;

    // ObservableCollection allows items to be added after ItemsSource
    // is set and the UI will react to changes
    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"});
}

Uyarı

birListView, temeldeki ObservableCollectiondeğişikliklere yanıt olarak güncelleştirilse de, ListView özgün ObservableCollection başvuruya farklı ObservableCollection bir örnek atandıysa (örneğinemployees = otherObservableCollection;) güncelleştirilmeyecektir.

Aşağıdaki kod parçacığı, bir çalışan listesine bağlı olduğunu gösterir 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"
            ItemsSource="{Binding Employees}">
    <ListView.ItemTemplate>
      <DataTemplate>
        <TextCell Text="{Binding DisplayName}" />
      </DataTemplate>
    </ListView.ItemTemplate>
  </ListView>
</ContentPage>

Bu XAML örneği, içeren bir ContentPage ListViewtanımlar. öğesinin ListView veri kaynağı özniteliği aracılığıyla ItemsSource ayarlanır. içindeki ItemsSource her satırın düzeni öğesi içinde ListView.ItemTemplate tanımlanır. Bu, aşağıdaki ekran görüntülerine neden olur:

Veri Bağlama kullanarak ListView

Uyarı

ObservableCollection iş parçacığı güvenli değildir. Bir ObservableCollection değiştirme, kullanıcı arabirimi güncelleştirmelerinin değişiklikleri gerçekleştiren aynı iş parçacığında gerçekleşmesine neden olur. İş parçacığı birincil ui iş parçacığı değilse, bir özel duruma neden olur.

SelectedItem Bağlama

Genellikle değişiklikleri yanıtlamak için bir ListViewolay işleyicisi kullanmak yerine öğesinin seçili öğesine bağlamak istersiniz. Bunu XAML'de yapmak için özelliğini bağlayın SelectedItem :

<ListView x:Name="listView"
          SelectedItem="{Binding Source={x:Reference SomeLabel},
          Path=Text}">
 …
</ListView>

's öğesinin bir dize listesi olduğunu varsayarsaklistView, SomeLabel özelliği ile SelectedItemilişkili olurText.ItemsSource