Murilo lima alves
Murilo lima alves

Reputation: 55

WPF - Binding Textbox Text to a class property

I am doing some changes in my WPF project to make it less deprecated. One of the things I am trying to do is Binding my Textbox.Text value to a simple Class as shown below.

<TextBox x:Name="txtNCM"
         Grid.Column="1"
         Margin="5"
         MaxLength="8"
         Text="{Binding Path=Name}"
</TextBox>
public partial class wCad_NCM : UserControl, INotifyPropertyChanged
{
    private string name;
    public event PropertyChangedEventHandler PropertyChanged;

    public string Name
    {
        get { return name; }
        set
        {
            name = value;
            OnPropertyChanged("Name");
        }
    }

    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }

    public wCad_NCM()
    {
        InitializeComponent();

    }
}

Everytime I use the Immediate Window to display the Name's value, it is shown as null. I am really new to this, so I had to search for a similar situation to adapt, but I don't know how to make this work :(

Upvotes: 1

Views: 4868

Answers (1)

DeathTails
DeathTails

Reputation: 468

You need to set the DataContext and give Name a value.

To do that, change your constructor to include this:

public wCad_NCM()
{
    InitializeComponent();
    DataContext = this; // Sets the DataContext
    Name = "Test";
}

This should make it work, but is typically bad practice. See http://blog.scottlogic.com/2012/02/06/a-simple-pattern-for-creating-re-useable-usercontrols-in-wpf-silverlight.html for more details.

Additionally, I tried running this and ran into a name hiding problem. Try using a variable name other than Name as FrameworkElement already contains it.

Upvotes: 3

Related Questions