J'ai deux contrôles sur WPF
<Button HorizontalAlignment="Center"
Name="btnChange"
Click="btnChange_Click"
Content="Click Me" />
<Label Name="lblCompanyId"
HorizontalAlignment="Center"
DataContext="{Binding ElementName=_this}"
Content="{Binding Path=CompanyName}" />
Comme nous pouvons voir que l'étiquette est liée à une propriété locale (dans le code Derrière), je ne vois aucune valeur sur l'étiquette lorsque je clique sur le bouton ...
Voici mon code derrière ...
public static readonly DependencyProperty CompanyNameProperty =
DependencyProperty.Register("CompanyName", typeof(string), typeof(Window3), new UIPropertyMetadata(string.Empty));
public string CompanyName {
get { return (string)this.GetValue(CompanyNameProperty); }
set { this.SetValue(CompanyNameProperty, value); }
}
private void btnChange_Click(object sender, RoutedEventArgs e) {
this.CompanyName = "This is new company from code beind";
}
Cordialement,
essayer
Content="{Binding ElementName=_this, Path=CompanyName}"
sans la liaison DataContext
MODIFIER
je n'ai aucun problème avec votre code, j'ai nommé votre fenêtre en x:Name="_this"
?
<Window x:Class="WpfStackOverflowSpielWiese.Window3"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
Title="Window3"
Height="300"
Width="300"
x:Name="_this">
<Grid>
<StackPanel>
<Button HorizontalAlignment="Center"
Name="btnChange"
Click="btnChange_Click"
Content="Click Me" />
<Label Name="lblCompanyId"
HorizontalAlignment="Center"
DataContext="{Binding ElementName=_this}"
Content="{Binding Path=CompanyName}"></Label>
</StackPanel>
</Grid>
</Window>
et votre fenêtre est-elle vraiment Window3
?
public partial class Window3 : Window
{
public Window3() {
this.InitializeComponent();
}
public static readonly DependencyProperty CompanyNameProperty =
DependencyProperty.Register("CompanyName", typeof(string), typeof(Window3), new UIPropertyMetadata(string.Empty));
public string CompanyName {
get { return (string)this.GetValue(CompanyNameProperty); }
set { this.SetValue(CompanyNameProperty, value); }
}
private void btnChange_Click(object sender, RoutedEventArgs e) {
this.CompanyName = "This is new company from code beind";
}
}
j'espère que cela pourra aider
Vous liez actuellement le DataContext
de votre étiquette à un Button
, puis vous essayez de définir son Content
sur CompanyName
, mais CompanyName
n'est pas une propriété valide sur Button
Spécifiez DataContext
dans votre liaison Path
pour vous lier à Button.DataContext.CompanyName
au lieu de Button.CompanyName
En outre, je recommanderais simplement de lier le contenu au lieu de lier à la fois le DataContext et le contenu
<Label Content="{Binding ElementName=btnChange, Path=DataContext.CompanyName}" />
Et si votre code ressemble exactement à l'exemple de code publié, alors Button
et Label
ont le même DataContext
, vous pouvez donc vous lier directement à CompanyName
<Label Content="{Binding CompanyName}" />
Modifier
Je viens de remarquer que la liaison de votre étiquette concernait un contrôle nommé _this
. J'avais supposé que c'était le bouton, même si je vois maintenant que le nom de votre bouton est btnChange
, pas _this
.
Peu importe, la réponse est toujours la même. Vous essayez de vous lier à la propriété CompanyName
d'un contrôle d'interface utilisateur, qui n'est pas une propriété valide.