Sie benötigen ein Modell erstellen, die eine Gruppierung mit einem Schlüssel enthält, die als Header verwendet werden sollen (und Wert wird durch gruppiert werden) und die aktuelles Modell.
Ich habe wie diese erstellt am:
public class PhoneGroup : ObservableCollection<Phone>
{
public string Name { get; private set; }
public PhoneGroup(string name)
: base()
{
Name = name;
}
public PhoneGroup(string name, IEnumerable<Phone> source)
: base(source)
{
Name = name;
}
}
Dieses erbt von der ObservableCollection
und fügt eine Name
Eigenschaft, die als Schlüssel verwendet werden können.
nun auf Ihrer Seite (oder besser; vie Modell) Sie eine Sammlung wie folgt hinzufügen:
public ObservableCollection<PhoneGroup> PhonesList { get; set; } = new ObservableCollection<PhoneGroup>();
und Artikel, um es hinzuzufügen, müssen Sie zunächst die Gruppe erstellen müssen, oder Scheck wenn es um die Elemente der rechten Gruppe vorhanden ist und fügen Sie, das heißt:
PhonesList.Add(new PhoneGroup("Apple", new[]{ new Phone
{
Title = "iPhone 6s",
Price = 50000
},
new Phone
{
Title = "iPhone 7",
Price = 38000
}}));
Jetzt eine ListView
zu Ihrer Seite hinzufügen, ich habe es in XAML getan, und konfigurieren Sie die ItemsSource
auf die Sammlung, die Sie definiert haben. Um die Gruppierung zu aktivieren, setzen Sie auch die Eigenschaften IsGroupingEnabled
und GroupDisplayBinding
wie im Code darunter.
<ListView ItemsSource="{Binding PhonesList}" IsGroupingEnabled="True" GroupDisplayBinding="{Binding Name}">
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Title}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Die Ausgabe wird wie folgt aussehen:
Ich habe ein Beispielprojekt für Sie erstellt, die here und begleitende blog post zu finden sind.
Je nachdem, wie Sie Ihre Daten laden, können Sie eine LINQ-Abfrage implementieren, um Ihre Modelle in die gruppierte Liste zu sortieren.
Natürlich sind andere Ansätze möglich. Beachten Sie insbesondere die MVVM Helpers-Bibliothek von James Montemagno here. Die ObservableRangeCollection
hat einige handliche Erweiterungen über die regulären ObservableCollection
und es hält auch ein Grouping
Modell, das eine allgemeinere Methode zur Gruppierung ist.
Wie pro Ihren Kommentar, um die Daten abzurufen und sie in die Gruppen hinzufügen, können Sie entlang der Linien von dieser einfiel:
var phonesResult = GetData();
PhonesList.Clear();
foreach (var phone in phonesResult)
{
if (!PhonesList.Any(company => company.Name == phone.Company))
PhonesList.Add(new PhoneGroup(phone.Company));
PhonesList.Single(company => company.Name == phone.Company).Add(phone);
}
GetData
ist der Aufruf Ihre Daten in JSON abzurufen, wir löschen die Liste, um alles zu ersetzen und dann durchlaufen Sie es und prüfen, ob die Gruppe (Firma in diesem Fall) bereits existiert. Wenn nicht, erstellen wir die Gruppe und fügen das aktuelle Telefon hinzu.
Dies ist nicht der effizienteste Weg, aber ich denke für jetzt den klarsten Weg, es Ihnen zu erklären.
Hoffe, dass dies [Link] (http://www.wpf-tutorial.com/listview-control/listview-grouping/) helfen wird – ChiragMM
JSON erstellen und laden von ihm, [hier klicken] (https: // Foren .xamarin.com/diskussion/37195/json-zu-observablecollection-zu-verwendet-auf-listview) – Raviprakash