2009-07-14 7 views
6

Das große Bild: Ich habe ein benutzerdefiniertes untergeordneten Steuerelement, das verschiedene Textfelder, Datumsauswahl, Combo usw. basierend auf Eigenschaften generiert, die ich festlegte. Dieses Steuerelement ist an verschiedenen Stellen in meiner SL-Anwendung eingebettet.Silverlight: Programmatisch verbindliche Steuerelementeigenschaften

Ich verwende in der Regel das MVVM-Muster, und ich möchte die Werte dieser dynamischen Steuerelemente in meinem Master-Seitenansichtsmodell binden.

Ich weiß immer, dass es 8 Steuerelemente auf dem Formular geben wird, damit ich Abhängigkeitseigenschaften für die Steuerelemente an die Stelle binden kann. Dann können die Steuerelemente, die auf dieses Steuerelement verweisen, eine Bindung mit den Daten verwenden, die unter Beibehaltung eines MVVM-Musters eingegeben wurden.

Die Frage: Wie kann ich die Werte von dynamischen Steuerelementen programmgesteuert an Abhängigkeitseigenschaften binden?

Danke, Mark

Antwort

10

Hier können Sie einen einfachen TextBox dynamisch erstellt haben, annehmen und Sie wollen eine Bindung an die Text-Eigenschaft hinzuzufügen: -

Binding binding = new Binding("SomeProperty"); 
binding.Mode = BindingMode.TwoWay; 

txtBox.SetBinding(TextBox.TextProperty, binding); 

Wo txtBox wird das TextBox dynamisch erstellt Sie wollen beobachten/mutieren.

+2

Ich vermute, es sollte Zuordnung zu binding.Quelle sein. Sonst bindet es nichts. –

+0

Können Sie meine verwandte Frage kommentieren? http://stackoverflow.com/questions/8854034/how-to-create-binding-inside-custom-control-automatically – katit

8

Mark, ich bin mir nicht ganz sicher, ob ich die Implikationen in Ihrer Frage verstanden habe, aber haben Sie die Binding-Klasse in Betracht gezogen? Zum Beispiel:

Customer customer = new Customer(); 
TextBox box = new TextBox(); 
Binding binding = new Binding("FullName"); 
binding.Source = customer; 
box.SetBinding(TextBox.TextProperty, binding); 

Dies bindet die „Text“ Abhängigkeitseigenschaft des Steuerelements TextBox auf das „Fullnamen“ Eigentum des Kunden-Objekts.

+1

Und wie AnthonyWJones darauf hingewiesen, müssten Sie BindingMode.TwoWay setzen, wenn Sie Änderungen in der TextBox möchten um zurück zum Kundenobjekt zu propagieren. –

+0

Sie möchten wahrscheinlich nicht die Quelle auf dieser Ebene zuweisen, obwohl Sie? – AnthonyWJones

+0

Ja, wahrscheinlich nicht - da überschreibt das den DataContext. –

Verwandte Themen