myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE
   » Gadget für Windows
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin

Ressourcen
» guide to C#
» openbook: Visual C#
» openbook: OO
» MSDN Webcasts
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und Silverlight » UserControl - Dokumentation/Leitfaden
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

UserControl - Dokumentation/Leitfaden

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
robin_ robin_ ist männlich
myCSharp.de-Mitglied

Dabei seit: 26.07.2017
Beiträge: 38
Entwicklungsumgebung: Visual Studio 2017 Community
Herkunft: Bergisch Gladbach


robin_ ist offline

UserControl - Dokumentation/Leitfaden

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

XML-Code:
<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:)
12.09.2017 18:48 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

images/avatars/avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 4.712
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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).
12.09.2017 21:05 Beiträge des Benutzers | zu Buddylist hinzufügen
mfe
myCSharp.de-Mitglied

Dabei seit: 15.01.2009
Beiträge: 165


mfe ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von robin_:
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/i...rol-hinzufugen/
13.09.2017 07:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
unconnected unconnected ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-3200.jpg


Dabei seit: 13.08.2006
Beiträge: 823
Entwicklungsumgebung: VS2015 Enterprise
Herkunft: Oerlinghausen/NRW


unconnected ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
13.09.2017 12:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Monate.
Der letzte Beitrag ist älter als 2 Monate.
Antwort erstellen


© Copyright 2003-2017 myCSharp.de-Team. Alle Rechte vorbehalten. 22.11.2017 15:42