Zum Inhalt springen

WPF: DependencyProperty in UserControl


Guybrush Threepwood

Empfohlene Beiträge

Ich habe ein UserControl mit einem Label das an eine DependencyProperty in der CodeBehind Datei gebunden ist


<Label Content="{Binding Path=MyText}" Foreground="Black"/>
[/PHP]

[PHP]private static readonly DependencyProperty MyTextProperty =
DependencyProperty.Register("MyText", typeof(string), typeof(MyUserControl), new FrameworkPropertyMetadata(new PropertyChangedCallback(MyTextPropertyChanged)));

public string MyText
{
get
{
return (string)GetValue(MyTextProperty);
}
set
{
SetValue(MyTextProperty, value);
}
}



private static void MyTextPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
{
}

public MyUserControl()
{
DataContext = this;
InitializeComponent();
MyText = "Hallo";
}

Binde ich das UserControl jetzt in einer anderen XAML View ein ohne das ich MyText setzte gibt das ganz normal Hallo aus.

Binde ich aber MyText an einen Wert aus dem View Model gibt das plötzlich nichts mehr aus.

<Label Content="{Binding Path=MyOriginalText}"/>
<iv:MyUserControl MyText="{Binding Path=MyOriginalText}"/>[/PHP]

Das erste Label gibt aber den richtigen Text aus, es ist also kein Problem des Bindings in der View sondern muss irgendwo an dem UserControl bzw. dem DependencyProperty liegen.

Wenn ich einen Haltepunkt in die MyTextPropertyChanged Methode setzte dann hält der da zwei mal an. Beim ersten Mal mit dem alten Wert null und dem neuen Wert "Hallo" und beim zweiten Mal mit dem alten Wert "Hallo" und dem neuen Wert null:confused:

Irgendwelche Ideen warum das nicht klappt?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok habs selber gelöst. Ein Blick ins Output Fenster hat mir gezeigt das er durch das

DataContext = this;

bereits hier:

<iv:MyUserControl MyText="{Binding Path=MyOriginalText}"/>  

MyOriginalText im UserControl selber gesucht hat und nicht mehr im DataContext der View die das einbindet.

Ich hab das jetzt entfernt und im Binding innerhalb des UserControls noch

RelativeSource={RelativeSource AncestorType={x:Type UserControl}}

mit angegeben.

Gefällt mir zwar nicht so gut aber die einzige Alternative die ich sehe wäre ein ViewModel für das UserControl zu erstellen was ich aber nicht möchte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...