WPF:简单的TextBox数据绑定
我有这个class级:
public partial class Window1 : Window { public String Name2; public Window1() { InitializeComponent(); Name2 = new String('a', 5); myGrid.DataContext = this; } // ... }
我想在文本框中显示stringName2
。
<Grid Name="myGrid" Height="437.274"> <TextBox Text="{Binding Path=Name2}"/> </Grid>
但是string不显示。 另外,如果使用TimerCallback
定期更新stringName2
,那么在数据更改时是否需要执行任何操作以确保文本框已更新?
Name2是一个字段。 WPF只绑定到属性。 将其更改为:
public string Name2 { get; set; }
被警告说,通过这个最小的实现,你的TextBox将不会响应对Name2的编程修改。 所以对于你的计时器更新scheme,你需要实现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"); } } } }
你应该考虑把它移到一个单独的数据对象而不是你的Window类。
您的窗口没有实现必要的数据绑定通知,网格需要将其用作数据源,即INotifyPropertyChanged接口。
你的“Name2”string也需要是一个属性而不是公共variables,因为数据绑定是用于属性。
在这里可以find将对象用作数据源的必要接口。
只是为了未来的需要。
在带有.NET Framework 4.5的Visual Studio 2013中,对于窗口属性,请尝试添加ElementName=window
以使其工作。
<Grid Name="myGrid" Height="437.274"> <TextBox Text="{Binding Path=Name2, ElementName=window}"/> </Grid>