Search code examples
wpfbindingpropertieslocal

How to bind local property on control in WPF


I have two controls on 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}" />

As we can see that label is bound to local property(in code Behind), I don't see any value on label when I click button...

Below is my code behind...

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";
}

Solution

  • Try:

    Content="{Binding ElementName=_this, Path=CompanyName}"
    

    Without the DataContext binding.

    EDIT

    I have no problems with your code, have named your window to 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>
    

    Is your window really 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 behind";
      }
    }