2011-12-20 2 views
18

У меня есть два элемента управления на WPFКак связать локальное свойство по контролю в 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}" /> 

Как мы можем видеть, что метка связываются с локальным свойством (в коде), я не вижу никакого ценности на метка, когда я нажимаю кнопку ...

Ниже мой код позади ...

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

С уважением,

ответ

30

попробовать

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

без DataContext связывания

EDIT

у меня нет проблем с вашим кодом, назвали ваше окно 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> 

и ваше окно действительно 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"; 
    } 
} 

надежда, что помогает

+0

Спасибо punker76. Ваше решение сработало! Мне просто нужно было добавить x: Name = "_ this" и boooom. – usergaro

3

Вы в настоящее время привязки вашей этикетки DataContext к Button, а затем пытается установить его Content в CompanyName, однако CompanyName не является допустимым свойством на Button

Укажите DataContext в вашей связи Path для связывания с Button.DataContext.CompanyName вместо Button.CompanyName

Кроме того, я бы рекомендовал только связывание содержимого вместо связывания как DataContext и содержание

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

И если ваш код выглядит точно так же, как образец кода размещен, то оба Button и Label имеют одинаковую DataContext, так что вы можете связать непосредственно CompanyName

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

Редактировать

Только что заметили, что привязка Label была к элементу управления с именем _this. Я предположил, что это была кнопка, хотя теперь я вижу, что имя вашей кнопки btnChange, а не _this.

Не имеет значения, хотя ответ остается тем же. Вы пытаетесь связать свойство CompanyName с пользовательским интерфейсом, что недействительно.

+0

Я не вижу, что DataContext Label привязывается к кнопке ... – punker76

+0

@ punker76 См. Мое редактирование. '_this' должен ссылаться на некоторый элемент управления пользовательского интерфейса, и я ошибочно предположил, что он относится к Button, поскольку он был частью образца кода. Принцип действия по-прежнему применяется, даже если он не является кнопкой. – Rachel

+0

Добавление ElementName в привязку ... только то, что я искал весь день! Благодаря! – thehelix

Смежные вопросы