Frage

ich brauche eine Binding in meinem UI Zwei-Wege-Datenbindung zwischen meiner Sammlung zur Verfügung zu stellen und ein Datagridview. Allerdings ist es nicht richtig, scheint eine Binding von Ihrer Business-Ebene zurückzukehren (oder Domänenschicht, Service-Layer, Datenschicht, etc.). Das heißt, würde ich nur eine Binding wegen einer UI-Anforderung verwenden, und jetzt die UI Notwendigkeit würde mit meiner Domain-Schicht gekoppelt werden.

Was ist die „richtige“ entkoppelt Art und Weise, dies zu tun? Sollte ich eine IList zurückkommen und das Kopieren es dann in eine Binding für Präsentationszwecke? Von einer realen Welt Perspektive ist dieser Aufwand etwas wert?

War es hilfreich?

Lösung

Ich denke, dass die Domain-Schicht, die die generischen Typen zurückkommen würde und ob sie (ObservableCollection<>) werden benachrichtigt oder nicht (IEnumerable<> oder IList<>) bis zu den Anforderungen.

Die UI-Schicht kann mit Transformieren ihnen umgehen, wie sie wollen (oder nicht) in IBindingList, wenn sie diese Funktionalität benötigen.

Wir haben verwendet BindableLinq großen Erfolg mit Filter, um die Ziele der anmelde / Synchronisiert Bindungsliste der (möglicherweise zu erreichen ) an der UI-Ebene.

Andere Tipps

Es gibt kein Kopieren eines IList (zumindest hoffe ich Sie nicht wirklich eine Kopie / Klon erstellen möchten). Alles, was Sie in der Regel tun, ist eine andere Referenz auf demselben IList-Objekt erstellen. So Rückkehr ein IList-Objekts ist nichts Schlimmes.

Sie können zurückkehren z.B. ein List-Objekt und bezeichnet es aus dem Binding (die in Ihrer Benutzeroberfläche befindet).

Meiner Meinung nach ist es besser, eine IList (List, HashTable aso) Objekt als ein Binding zurückzukehren, wie Sie die frühere Verwendung auf verschiedenen UIs (Konsole, Web, Win, Service). Z.B. ein Binding Verwendung würde nicht in einer Web-Anwendung jegliche Vorteils sein.

Ich weiß nicht, was die „richtige“ Art und Weise ist, aber ich habe gebrauchte Frameworks wie CSLA in der Vergangenheit, und ich weiß, dass es eine Binding und jetzt ein ObservableCollection für die Business-Listen verwendet. Dies machte die Business-Objekte in der Benutzeroberfläche sehr einfach, da die Benutzeroberfläche verwenden würde aktualisieren, wenn Elemente wurden aus den Listen hinzugefügt oder entfernt. Wenn Sie eine IList zurückkehren und kopieren Sie sie dann in eine Binding müssen Sie manuell überwachen und Griff Änderungen an den IList und die zum Binding übersetzen. Meine persönliche Präferenz ist eine funktionsreiche Business-Schicht zu haben, wenn möglich, die einen oder Binding ObservableCollection verwenden würde die Business-Schicht auf die Benutzeroberfläche zu präsentieren.

Wenn Sie die UI-Elemente zu bearbeiten, das Geschäftsmodell mögen, ohne Ihre eigenen Event-Handler Implementierung, das Geschäftsmodell ein Binding haben muss.

Immer tun Sie so etwas wie new BindingList<MyWidget>( list ) Sie die Bindung aus der Wurzelliste entkoppeln. Wenn ein Element bearbeitet wird, werden es alle gut funktionieren, aber Ergänzungen und Streichungen werden nicht in der ursprünglichen Liste berücksichtigt werden.

ich so etwas wie dies vor kurzem versucht, die Umsetzung, durch die Erschließung des Binding ListChanged Ereignis, das mein Modell aktualisiert, um das Binding ändert, aber wenn das Modell durch die Steuerung geändert wurde es nicht den Binding in der Benutzeroberfläche aktualisieren.

Sie könnten spezielle Zugriffsmethoden auf Ihre Listen erzeugen, dass Raise Ereignisse jedes Mal, wenn Sie hinzufügen oder entfernen Elemente aus der Liste, aber das gerade neu zu erfinden sind mit mehr Aufwand das Rad Binding.

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