c # Bindung an Felder in einem verschachtelten Objekt

8

Ich kann keine einfache, konkrete Erklärung dafür finden, wie Steuerelemente in einer WinForms-Anwendung mit Datenbindung an verschachtelte Objekte gebunden werden. Zum Beispiel:

%Vor%

Stellen Sie sich nun ein Formular mit nur zwei Textfeldern vor, das erste für Name und das zweite für Inner.SomeValue. Ich bin leicht in der Lage, bindend zu werden, gegen Name zu arbeiten, aber Inner.SomeValue ist flockig. Wenn ich das Objekt auffüllen und dann die Bindung einrichten, zeigt es Inner.SomeValue in der Textbox, aber ich kann es nicht bearbeiten. Wenn ich von einem neuen Objekt aus anfange, ohne Inneres zu initialisieren, kann ich scheinbar keine Daten in Inner.SomeValue erhalten.

Ich habe MSDN, StackOverflow und Dutzende von Suchanfragen mit verschiedenen Keywords überprüft. Jeder möchte über die Bindung an Datenbanken oder DataGrids sprechen, und die meisten Beispiele sind in XAML geschrieben.

Update: Ich habe Marc's vollständiges Test-Harness ausprobiert und habe teilweise Erfolg. Wenn ich die "alle ändern!" Ich scheine in der Lage zu sein, auf das innere Objekt zurück zu schreiben. Ab MyObject.Inner null weiß es jedoch nicht, wie ein inneres Objekt erstellt wird. Ich denke für jetzt, ich kann es umgehen, indem ich nur dafür sorgen, dass meine inneren Referenzen immer auf ein gültiges Objekt eingestellt sind. Trotzdem kann ich mir nicht helfen zu fühlen, dass ich etwas vermisse:)

    
Matt Cooper 20.10.2010, 03:49
quelle

1 Antwort

4

Hmm - eine ausgezeichnete Frage; Ich habe eine Menge Daten an Objekte gebunden, und ich hätte geschworen , dass das, was du machst, funktionieren sollte; aber in der Tat ist es sehr widerwillig, die Veränderung zum inneren Objekt zu bemerken. Ich habe es geschafft zu arbeiten:

%Vor%

Nicht ideal, aber es funktioniert. BTW; Sie könnten die folgenden Hilfsmethoden nützlich finden:

%Vor%

Dann können Sie haben:

%Vor%

Und darüber hinaus behebt es die (geringe) Chance einer Null-Ausnahme (Race-Bedingung).

Voller Prüfstand, um Knicke auszubügeln (aus Kommentaren):

%Vor%     
Marc Gravell 20.10.2010, 05:50
quelle