2013-05-28 2 views
1

Я пытаюсь сделать простой привязку, но у меня возникают некоторые проблемы. У меня есть текстовый блок и кнопка. Текстовый блок привязан к свойству, называемому «слово». Когда вы нажимаете кнопку, меняется значение слова, и я хочу автоматически обновить текстовый блок. Это классический пример, пожалуйста, объясните мне, что я делаю неправильно:Пример супер простого связывания

namespace WpfApplication5 
{ 
    public partial class MainWindow : Window, INotifyPropertyChanged 
    { 

     private string _word; 

     public string word 
     { 
      get { return _word; } 
      set 
      { 
       _word= value; 
       RaisePropertyChanged(word); 
      } 
     } 

     private void change_Click(object sender, RoutedEventArgs e) 
     { 
      word= "I've changed!"; 
     } 


     #region INotifyPropertyChanged Members 

     public event PropertyChangedEventHandler PropertyChanged; 

     private void RaisePropertyChanged(string propertyName) 
     { 
      if (this.PropertyChanged != null) 
       this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 

     #endregion 


    } 
} 

И мой XAML с связыванию:

<Window x:Class="WpfApplication5.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <TextBlock HorizontalAlignment="Left" Margin="210,152,0,0" TextWrapping="Wrap" Text="{Binding word}" VerticalAlignment="Top"/> 
     <Button x:Name="change" Content="Change" HorizontalAlignment="Left" Margin="189,235,0,0" VerticalAlignment="Top" Width="75" Click="change_Click"/> 
    </Grid> 
</Window> 

ответ

2

Вы поднимаете PropertyChanged события для свойства с именем I've changed!, потому что вы передаете значение от word до RaisePropertyChanged. Вам нужно пройти имя имущества вместо:

RaisePropertyChanged("word"); 

Этот ответ предполагает, что контекст данных установлен правильно. Если нет, вам также необходимо исправить это:

DataContext = this; 
+0

Спасибо, я не заметил этого раньше. Как установить DataContext? Я попытался «this.DataContext»; перед InitializeComponent(); но это не позволяет мне это делать. – Sturm

+0

@Sturm: см. Обновление. –

+0

Я очень ценю вашу помощь, которая сработала! Теперь я готов идти дальше и изучать реальную привязку. Кстати, как вы связываете какое-то свойство вроде этого, но в другом классе? (Не код MainWindow). Например, если у меня есть класс Data.cs, ​​разделенный с этим словом? – Sturm

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