WPF:简单文本框数据绑定

WPF:简单文本框数据绑定,wpf,data-binding,textbox,Wpf,Data Binding,Textbox,我有这门课: public partial class Window1 : Window { public String Name2; public Window1() { InitializeComponent(); Name2 = new String('a', 5); myGrid.DataContext = this; } // ... } 我想在文本框中显示字符串Name2 <Grid

我有这门课:

public partial class Window1 : Window
{
    public String Name2;

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

    // ...
}
我想在文本框中显示字符串
Name2

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


但是字符串不会显示。此外,如果字符串
Name2
使用
TimerCallback
定期更新,我是否需要做些什么来确保文本框在数据更改时更新?

您的窗口没有实现网格将其用作数据源(即接口)所需的必要数据绑定通知

“Name2”字符串还需要是属性而不是公共变量,因为数据绑定用于属性


可以找到实现将对象用作数据源所需的接口。

Name2是一个字段。WPF只绑定到属性。将其更改为:

public string Name2 { get; set; }
请注意,使用这种最小的实现,您的文本框将不会响应对Name2的编程更改。因此,对于计时器更新方案,您需要实现INotifyPropertyChanged:

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

  protected void OnPropertyChanged(string propertyName)
  {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  }

  private string _name2;

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

你应该考虑把这个移动到一个单独的数据对象,而不是在你的窗口类上。

只是为了将来的需要。

在Visual Studio 2013和.NET Framework 4.5中,对于窗口属性,请尝试添加
ElementName=window
,使其正常工作

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


作为提示,您可以通过缩进四个空格或使用101010按钮来设置代码格式,这样可以避免手动使用br标记和转义尖括号来处理代码!MSDN中关于实现INotifyPropertyChanged接口的示例(向下滚动到DemoCustomer实现):按照您的示例,我会,但它不起作用