Sturm
Sturm

Reputation: 4125

Super simple binding example

I'm trying to do a simple binding but I'm having some problems. I have a text block and a button. The textblock is binded to a property called "word". When you press the button the value of word changes and I want to automacally update the text block. This is a classic example, please explain me what I'm doing wrong:

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


    }
}

And my XAML with the binding:

<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>

Upvotes: 1

Views: 161

Answers (1)

Daniel Hilgarth
Daniel Hilgarth

Reputation: 174299

You are raising a PropertyChanged event for a property named I've changed!, because you pass the value of the property word to RaisePropertyChanged. You need to pass the name of the property instead:

RaisePropertyChanged("word");

This answer assumes that the data context is set correctly. If not, you need to fix that too:

DataContext = this;

Upvotes: 2

Related Questions