Ich habe eine usercontrol (eine Bezeichnung und ein Textfeld. Ich möchte den Text des Benutzersteuerelements an die Eigenschaft Name aus einer DTO-Klasse Employee (Employee.Name) binden, wo ist verbindlich set im Hauptfenster, außerhalb des Usercontrol. das ist mein Usercontrol (Blick auf die Kontrollen Label und Text)wpf bind usercontrol -Eigenschaft zu datacontext von mainwondow
<UserControl x:Class="TestCompany.controls.textEdit"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:TestCompany.controls"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="60" />
<RowDefinition MinHeight="50" />
</Grid.RowDefinitions>
<Label Name="label" Content="{Binding Caption}" Grid.Row="0" FontSize="35" FontWeight="Light"/>
<TextBox Name="textbox" Text="{Binding Text}" Grid.Row="1" FontSize="33" Background="White" />
</Grid>
Bildunterschrift ist der Titel der Kontrolle und Text displ dem Wert
ays Und hier ist der Code hinter
public string Caption
{
get
{
return (string)GetValue(CaptionProperty);
}
set
{
SetValue(CaptionProperty, value);
}
}
public static DependencyProperty CaptionProperty =
DependencyProperty.Register("Caption", typeof(string), typeof(textEdit), null);
public string Text
{
get
{
return (string)GetValue(TextProperty);
}
set
{
SetValue(TextProperty, value);
}
}
public static DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(textEdit), null);
nun im Hauptfenster, das ist, wie ich mein benutzerdefiniertes Steuerelement
<controls:textEdit Caption="Name" Text="{Binding Name}" Grid.Column="0" HorizontalAlignment="Stretch" Margin="0,0,20,0" />
Dann im Hauptfenster, aus der Liste der Mitarbeiter, ich nehme die ausgewählte und ich ordne es dem Kontext
this.DataContext = EmployeeObject; // Name = "Joe"
Aber die Text-Eigenschaft von Der usercontrol zeigt nicht "Joe" an. Selbst der Setter der Immobilie wird nie genannt. Die seltsame ist, dass, wenn im Konstruktor meines Usercontrol I dieses zuweisen UserControl.Datacontext nicht zu
DataContext = this; // within the constructor of UserControl
dann auch das Label-Steuerelement leer ist (das Label der Steuerung an die Caption-Abhängigkeitseigenschaft verknüpft). Ich habe unzählige ähnliche Probleme auf StackOverflow und wo sonst gesehen. (RelativeSource Self usw.). Nichts funktioniert ... Die Eigenschaft Text meiner Benutzersteuerung nicht Wert anzeigt von dem Datacontext-Set im Hauptfenster ...
Jede Hilfe wäre sehr dankbar
Mögliches Duplikat von [Binding to UserControl DependencyProperty] (http://stackoverflow.com/questions/16985382/binding-to-usercontrol-dependencyproperty); Lesen Sie auch Kommentare zu DataContext unter akzeptierter Antwort – ASh
Danke für den Vorschlag. Ich habe die dort bereitgestellte Lösung angewendet. Der Text zeigt den Wert korrekt an. Aber das Label ist jetzt leer – TheSoul
Können Sie den Code bei der Erstellung des EmployeeObject einschließen? – tgpdyk