C# – INotifyPropertyChanged – Event stays null

cinotifypropertychangedwpf

I am trying to implement the following INotifyPropertyChanged Extension:

Automatically INotifyPropertyChanged (accepted answer)
http://ingebrigtsen.info/2008/12/11/inotifypropertychanged-revisited/

But I cant figure out why my PropertyChanged EventHandler stays null. 🙁

I did a very simple WPF Application to test it out, here is my XAML Code:

<StackPanel Orientation="Vertical">
    <TextBox Text="{Binding Path=SelTabAccount.Test, UpdateSourceTrigger=PropertyChanged}"></TextBox>
    <TextBox Text="{Binding Path=SelTabAccount.TestRelated, UpdateSourceTrigger=PropertyChanged}"></TextBox>
</StackPanel>

And my code behind:

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private TabAccount _selTabAccount;

    public TabAccount SelTabAccount
    {
        get { return _selTabAccount; }
        set
        {
            _selTabAccount = value;
            PropertyChanged.Notify(() => this.SelTabAccount);
        }
    }

    public MainWindow()
    {
        InitializeComponent();

        SelTabAccount = new TabAccount()
        {
            Test = "qwer",
            TestRelated = ""
        };
    }
}

public partial class TabAccount : INotifyPropertyChanged
{
    private string _test;

    public string Test
    {
        get { return _test; }
        set
        {
            _test = value;
            PropertyChanged.Notify(() => this.Test);
            PropertyChanged.Notify(() => this.TestRelated);
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

public partial class TabAccount
{
    private string _testRelated;

    public string TestRelated
    {
        get
        {
            _testRelated = Test + "_Related";
            return _testRelated;
        }
        set
        {
            _testRelated = value;
            PropertyChanged.Notify(() => this.TestRelated);
        }
    }
}

In the code behind you will see one class (its partial for just random testing) with 2 properties that should notify a property change but nothing happens.

The NotificationExtension is a copy and paste from the links provided at top and is in a external cs file.

I have also tried to do the sample with the "normal" INotifyPropertyChanged implementation and this works as expected but I cant make it happen with this extension class.

Hope you can help me figure it out.
Thanks in advance.

Best Answer

Binding will work only when you provide some datasource to the visual objects. If you don't provide any datasource and want to dig into the properties the binding will not work.

Under your MainWindow Constructor, set the DataContext property of the Window to a datasource. For example:

 public MainWindow()
 {
    InitializeComponent();

   // your property setups

    this.DataContext = this; 
 }

Essentially this makes the MainWindow properties available for binding to the visual tree of MainWindow items.

Related Topic