Frage

Ich arbeite an einer MVVM-basierten WPF-Anwendung, die die DataGrid verwendet. Das Raster ist dagetenbundenen zu einer ObservableCollection<Widget> (die Widget Liste). Der Benutzer muss in der Lage sein eine Widget in der Liste unter dem aktuell ausgewählten Widget einzufügen, um eine ausgewählte Widget zu löschen und Widgets auf dem Gitter neu zu ordnen. Ich werde die Umordnung durch Ziehen implementieren und fallen zu lassen.

Bevor ich in diese graben, ich will einen Reality-Check auf meinem Ansatz bekommen. Hier ist, was ich zu tun Planung: Die Widget Klasse wird eine Index Eigenschaft hat, die verwendet werden, um die Widget Liste zu bestellen. Ergänzungen, Löschungen und Umordnung wird durch die Manipulation dieser Eigenschaft Index durchgeführt werden, und die Sortierung auf der Widget Liste getan werden, anstatt durch einen CollectionView.

Vor dem DataContext gesetzt ist, wird die Widget Liste auf der Index Eigenschaft sortiert werden. Wenn ein Benutzer eine Widget fügt, wird die Index Eigenschaft um 1 für jede Widget unter dem ausgewählten Punkt auf dem Raster inkrementiert werden, und die neuen Widget wird die Indexnummer eröffnet durch die Umnumerierung gegeben werden. Die Widget Liste wird zurückgegriffen, und die Bindungen werden aktualisiert.

Wenn ein Benutzer eine Widget löscht, wird der Widget aus der Liste entfernt werden, und die Index Eigenschaft von Gegenständen auf dem Gitter unter dem gelöschten Elemente wird von 1. Die Widget Liste verringert wird geltend gemacht werden, und die Bindungen aufgefrischt, wie oben. Die Neuanordnung wird als eine Kombination löschen-and-Einsatz erfolgen.

Hier ist meine Frage: Ist das eine vernünftige Strategie Einfügen für die Implementierung, Löschen und Neuordnen? Gibt es einen besseren Weg, um darüber zu gehen? Jeder guter Artikel oder Blog-Posts zu diesem Thema? Ich habe gesucht, aber ich komme nicht mit irgendetwas auf dem Punkt.

Danke für Ihre Hilfe.

War es hilfreich?

Lösung

Ich habe gedacht, dieses Problem aus. Ich mache die Index-Eigenschaft benötigen, aber ich brauche nicht die ObservableCollection zu sortieren. Ich erstelle eine Schnittstelle, IIndexedObject, mit einer Eigenschaft, Index. Ich implementieren diese Schnittstelle auf ein beliebiges Objekt, die indiziert werden muss, und in meiner Datenbank-Tabelle, ich eine Spalte Index hinzuzufügen.

Wenn ich in meinem Objektmodell laden, ich die Datenbank-Tabelle auf dem Index-Eigenschaft sortieren. Damit ist sichergestellt, dass die Liste in der gleichen Reihenfolge wie in dem letzten Lauf geladen wird. I Objekte hinzufügen die leere Zeile am unteren Rand des Datenraster bereitgestellt werden. Es gibt ihnen einen Index von 0. I Objekte löschen Delete-Taste, um eine ICommand im View-Modell gebunden werden.

Meine Ansicht Modell abonniert die Collection Eigenschaft eines ObservableCollection, die IIndexedObjects enthält. Wenn das Ereignis ausgelöst wird, so geht die Ansicht Modell um die Sammlung zu einer ReIndexCollection Service-Methode, die eine IIndexedObject dauert. Die Verfahren zur Wieder Indizes die Sammlung, auf der Grundlage ihrer aktuellen Auftrags, indem einfach die Sammlung Iterieren, Zuweisen eines inkrementellen ganzzahligen Wert zu jedem Index Eigenschaft des Elements. Wenn ich die Sammlung wieder in der Datenbank bestehen, wird der Indexwert gespeichert, um sicherzustellen, dass die Sammlung in der gleichen Reihenfolge auf den nächsten Lauf geladen wird.

Da die einzige Sortieranlage, die benötigt wird, wird in der Datenbank Last erfolgt, gibt es keine Notwendigkeit, die ObservableCollection zu sortieren. Wenn ich Artikel auf dem Datagrid zu verschieben, wird es zu dieser Zeit kümmern sich die Sammlung von Nachbestellung. Alles, was ich die Sammlung neu Index zu tun haben, so dass seine Bestellung zurück in die Datenbank beibehalten werden.

All-in-all, es ist viel einfacher, als ich erwartet hatte. Einer der Gründe, warum ich WPF und MVVM mag.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top