Laden...

UserControl - Dokumentation/Leitfaden

Erstellt von robin_ vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.612 Views
R
robin_ Themenstarter:in
38 Beiträge seit 2017
vor 6 Jahren
UserControl - Dokumentation/Leitfaden

Hallo,

Ich habe die letzten Tage damit verbracht, ein eigenes UserControl, bestehend aus einer TextBox und 2 Buttons, zu bauen. Nun habe ich verschiedene Fragen diesbezüglich und würde gerne am liebsten Wissen, wo ich diesbezüglich nachlesen kann 😃

Folgendes: Ich habe zb. eine DependencyProperty (string) die an die Eigenschaft text der TextBox gebunden ist.

Wenn ich nun in einem Projekt mein UserControl im XAML verwende, kann ich die Property setzten:

<ns:MeinUserControll MeineDependencyProperty="xxx" />

Was muss ich im Code machen, um diesen Wert zu kriegen? Weil die string - Property zb. nicht mit dem Wert befüllt wird, der im der XAML angegeben wird. (Vielleicht habe ich das auch ein Konzeptionelles Problem).

Weitere Frage:
Ich habe aktuell in der .cs-Datei des UserControls eine Eigenschaft, die (mittels DataTrigger) das aussehen der TextBox verändert. Dieses ist also an die Eigenschaft 'MeineEigenschaft' gebunden (DataContext ist also die Code-Behind-Datei). Nun habe ich das Problem, dass mein UserControl in einem ListView ist. Der ListView ist an eine ListCollectionView - Eigenschaft meines ViewModels gebunden. Somit sucht die Textbox meines UserControls das angegebene Binding in den Objekten des ListCollectionViews (Model-Klasse) und eben nicht in der CodeBehind-Datei... Der DataContext ist sozusagen durch (die anderen Elemente in der XAML) überschrieben worden.

Oder anders gesagt: Mein UserControl liegt in einer ListView, an die gebunden wird. Deshalb findet das Binding in meinem Control die Eigenschaft nicht mehr (denn der DataContext ist in dem Fall das Objekt der ObservableCollection<objekt> / Item des ListCollectionView).

Das Problem ist recht schwer zu umschreiben, ich vermute auch eher allgemeine Fehler in meiner Herangehensweise/ Verständnis. Aus früheren Fragen hatte ich mal entnommen, dass man nicht für jedes Element im Baum den DataContext setzt, sondern einmal fürs Top-Element und sich dann "durchhangelt" mit dem PropertyPath. Somit haben aber Sub-Elemente automatisch diesen Bereich und können nur noch "tiefer" gehen.

Ich habe das Problem überbrückt, indem ich der Model-Klasse der ObservableCollection<> eine Referenz vom Typ des ViewModels mitgebe und sozusagen über die ModelKlasse.ReferenzAufVM ans ViewModel binde - was natürlich sehr unschön ist.

Ich vermute, dass meine Herangehensweise da evt. nicht sauber ist und es deshalb nun Probleme gibt - Vielleicht habt ihr ja paar Tipps oder was zu lesen oder so 😉

Danke:)

MfG Robin

5.657 Beiträge seit 2006
vor 6 Jahren

Hi,

wie man UserControls mit DependencyPropertys erstellt, steht relativ ausführlich in der Doku. Davon abgesehen, gibt es unzählige UserControls, wo der SourceCode verfügbar ist. Dort kannst du dir anschauen, wie es umgesetzt wird. So wie es klingt, willst du eine Art NumericUpDown-Control erstellen, davon gibt es schon einige Umsetzungen im Netz zu finden, die du als Vorbild verwenden kannst.

Deinen Ausführungen bzgl. der Liste und dem Model in der Collection kann ich nicht folgen. Hier geht es mehr um die Verwendung eines Controls als um die Erstellung eines solchen. Es ist letztendlich kein Unterschied, ob man ein selbsterstelltes Control innerhalb eines ItemsControls verwendet, oder eines aus dem Framework. Hier mußt du dir nur mal anschauen, wie man ein ItemsControl mit untergeordneten Controls verwendet, z.B. in [Artikel] MVVM und DataBinding (Strg-F: DataTemplate).

Weeks of programming can save you hours of planning

M
177 Beiträge seit 2009
vor 6 Jahren

Oder anders gesagt: Mein UserControl liegt in einer ListView, an die gebunden wird. Deshalb findet das Binding in meinem Control die Eigenschaft nicht mehr (denn der DataContext ist in dem Fall das Objekt der ObservableCollection<objekt> / Item des ListCollectionView).

Ich denke, dein Problem wird hier beschrieben:
http://get-the-solution.net/2009/02/20/itemssource-zu-usercontrol-hinzufugen/

849 Beiträge seit 2006
vor 6 Jahren

Hallo Robin,

wann versuchst Du denn das Property MeineDependencyProperty auszulesen? Im Konstruktor ist es dafür zu früh, da das control in dem Moment noch nicht komplett geladen ist.