views:

832

answers:

2

I have this class:

public partial class Window1 : Window
{
  public String Name2;


  public Window1()
  {
    InitializeComponent();
    Name2 = new String('a', 5);
    myGrid.DataContext = this;
  }

And I want to display the string Name2 is a textbox.

<Grid Name="myGrid" Height="437.274">
  <TextBox Text="{Binding Path=Name2}"/>
</Grid>

But it isn't display the string. Also, if the string Name2 is updated periodically using a TimerCallback, do I need to do anything to make sure the TextBox is updated when the data changes?

Thanks!

+1  A: 

Your Window is not implementing the necessary data binding notifications that the grid requires to use it as a data source, namely the INotifyPropertyChanged interface.

Your "Name2" string needs also to be a property and not a public variable, as data binding is for use with properties.

Implementing the necessary interfaces for using an object as a data source can be found here.

Darien Ford
+2  A: 

Name2 is a field. WPF binds only to properties. Change it to:

public string Name2 { get; set; }

Be warned that with this minimal implementation, your TextBox won't respond to programmatic changes to Name2. So for your timer update scenario, you'll need to implement INotifyPropertyChanged:

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

  // usual OnPropertyChanged implementation

  private string _name2;

  public string Name2
  {
    get { return _name2; }
    set
    {
      if (value != _name2)
      {
         _name2 = value;
         OnPropertyChanged("Name2");
      }
    }
  }
}

You should consider moving this to a separate data object rather than on your Window class.

itowlson