2011-12-20 19 views
18

Tengo dos controles de WPFCómo enlazar la propiedad local en el control de 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}" /> 

Como podemos ver que la etiqueta está ligada a la propiedad local (en código detrás), que aún no hay valor en etiqueta cuando hago clic en el botón ...

A continuación se muestra el código detrás ...

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

Saludos,

Respuesta

30

intenta

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

sin la unión DataContext

EDITAR

no tengo problemas con su código, han nombrado a su ventana para 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> 

y es su ventana realmente 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"; 
    } 
} 

esperanza de que ayuda a

+0

Gracias punker76. Tu solución funcionó! Solo necesitaba agregar x: Name = "_ this" y boooom. – usergaro

3

va a enlazar momento de su etiqueta DataContext a un Button, y luego tratar de establecer que es Content a CompanyName, sin embargo CompanyName no es una propiedad válida en Button

Especificar DataContext en su enlace Path para enlazar a Button.DataContext.CompanyName en lugar de Button.CompanyName

Además, me gustaría recomendar simplemente enlazar el contenido en lugar de unirse tanto al DataContext y contenido

<Label Content="{Binding ElementName=btnChange, Path=DataContext.CompanyName}" /> 

Y si su código es exactamente igual que el ejemplo de código publicado, entonces tanto el ButtonLabel y tener el mismo DataContext, por lo que puede unirse directamente a CompanyName

<Label Content="{Binding CompanyName}" /> 

Editar

Acabo de notar que el enlace de su etiqueta era para un control llamado _this. Había asumido que era el Botón, aunque ahora veo que el nombre de su Botón es btnChange, no _this.

No importa, la respuesta sigue siendo la misma. Está intentando enlazar a la propiedad CompanyName de UI Control, que no es una propiedad válida.

+0

no veo que el DataContext de la etiqueta se vincule a un botón ... – punker76

+0

@ punker76 Ver mi edición. '_this' tiene que referirse a algún control de IU, y erróneamente asumí que se refería al Botón ya que era parte del ejemplo de código. El principal todavía se aplica, incluso si el control no es un botón. – Rachel

+0

Agregar el ElementName en el enlace ... ¡justo lo que he estado buscando toda la tarde! ¡Gracias! – thehelix

Cuestiones relacionadas