Ich lese viele Themen über die Verwendung von ObservableCollection, aber ich verstehe nicht, was ich in meinem Fall tun soll. Ich habe folgende PageContent
Struktur:Wie aktualisieren Elemente auf einer Inhaltsseite?
Ich benutze IList Sammlung meine Xamarin.Form.Image
zu speichern. Ich nehme es aus der Datenbank. Die Anzahl der Zeilen und Spalten des Rasterlayouts hängt definitiv von der Anzahl der Bilder in einer Datenbank ab. Benutzer kann neue Bilder in eine Datenbank laden. Es wird in einer Datenbank unter Verwendung von ImageRepository
und Anzeigen in der IList<T>
Sammlung angezeigt, aber ich weiß nicht, wie ich mein Rasterlayout dynamisch neu zeichnen. Ich habe versucht, dies zu tun, wie folgt:
//this.images
//is a IList<Images> which stores as property of the class.
private void OnClickSearchImagesButton(object sender, EventArgs args)
{
IFiler filer = DependencyService.Get<IFiler>();
// Get all paths of the images
IEnumerable<string> filesPath = filer.GetFilesPaths(FileExtension.JPG);
IEnumerable<Image> images = filesPath.Select(f => new Image { Source = ImageSource.FromFile(f) });
foreach (Image img in images)
{
// If found image does not exist
// Add it to a database
// --------------------
// Redraw grid layout
this.gridLayout = new Grid();
const int numberOfImagesPerRow = 3;
int numberOfImages = this.images.Count;
int numberOfRows = (int)Math.Ceiling((double)numberOfImages/numberOfImagesPerRow);
// configure grid layout
for (int i = 0; i < numberOfRows; i++)
{
this.gridLayout.RowDefinitions.Add(new RowDefinition { Height = new GridLength(200) });
}
for (int i = 0; i < numberOfImagesPerRow; i++)
{
this.gridLayout.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });
}
for (int i = 0, imageNumber = 0; i < numberOfRows; i++)
{
for (int j = 0; j < numberOfImagesPerRow && imageNumber < numberOfImages; j++, imageNumber++)
{
this.gridLayout.Children.Add(images[imageNumber], j, i);
}
}
}
}
Aber es half mir nicht. Ich sah einige Themen, wenn Leute ObservableCollection
für Artikel anstelle von List
verwenden. Ich bin ein wenig verwirrt, weil ich denke, dass ich alle meine Artikel in ObservableCollection speichern muss. Könnten Sie mir bitte erklären, wie Sie die Informationen auf der Seite am besten halten können?
FlowListView ist ein guter Vorschlag, aber es ist nicht korrekt zu sagen ObservableCollection ist ohne ein vor-gebackenes Steuerelement nicht hilfreich, um es zu verbrauchen. Der Vorteil von ObservableCollection besteht in den Ereignissen, die ausgelöst werden, wenn die Sammlung geändert wird.Steuerelemente wie ListView nutzen dies aus, indem sie sie abonnieren und aktualisieren, wenn sie ausgelöst werden. Sie können dies auch mit Ihrer eigenen Kontrolle tun. –