Wie liest man einen übergebenen Parameter in einem WPF UserControl?

7

Ich habe ein Benutzersteuerelement in WPF erstellt:

%Vor%

Der hinterstehende Code hat einen Parameter namens "FirstMessage", den er als Text meines Benutzersteuerelements TextBlock festlegt:

%Vor%

In meinem Hauptcode kann ich den FirstMessage-Parameter in meinem Benutzersteuerelement mit intellisense:

festlegen %Vor%

Der Text wird jedoch immer noch nicht festgelegt. Ich habe versucht, Text="{Binding Path = FirstMessage}" und andere Syntaxen, die ich gefunden habe, aber nichts funktioniert.

Wie kann ich auf den FirstMessage-Wert in meinem Benutzersteuerelement zugreifen?

    
Edward Tanguay 03.02.2009, 16:28
quelle

5 Antworten

15

Ihr Bindungsansatz funktioniert nicht, da Ihre Eigenschaft FirstMessage nicht benachrichtigt, wenn sie aktualisiert wird. Verwenden Sie dazu Abhängigkeitseigenschaften. Siehe unten:

%Vor%

XAML:

%Vor%

Wenn sich die FirstMessage-Eigenschaft ändert, aktualisiert sich der Textblock selbst.

    
Szymon Rozga 03.02.2009, 20:15
quelle
3

FirstMessage wird gesetzt, nachdem der Konstruktor aufgerufen wurde. Sie sollten Ihren Text vom Set von FirstMessage ändern.

Beim Initialisieren eines Objekts von XAML wird zuerst der Standardkonstruktor aufgerufen, dann werden die Eigenschaften für das Objekt festgelegt.

    
Bubblewrap 03.02.2009 16:34
quelle
2

In diesem kurzen Beispiel wird keine Bindung verwendet, da der Wert erst nach dem Aufruf des Standardkonstruktors eingerichtet wird, aber hier können Sie sehen, wie der Text angezeigt wird.

%Vor%

Dann ändern Sie einfach Ihre CS-Datei zu diesem:

%Vor%

Ich empfehle, stattdessen an der Einrichtung einer Bindung zu arbeiten, da dies ziemlich Spaghetti-ähnlicher Code ist.

    
Adrian 03.02.2009 16:44
quelle
1

Sie können auch verwenden:

%Vor%     
Nir 04.02.2009 09:21
quelle
0

Bei dem oben angegebenen Code handelt es sich um ein Timing-Problem. Die FirstMessage-Eigenschaft wurde nicht zugewiesen, wenn der Konstruktor ausgeführt wird. Sie müssten diesen Code in einem späteren Ereignis wie Loaded ausführen.

    
Richard McGuire 03.02.2009 16:36
quelle

Tags und Links