我有这个课:
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是一个字段。 WPF仅绑定(bind)到属性。更改为:
public string Name2 { get; set; }
请注意,使用此最小实现,您的TextBox将不会响应对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");
}
}
}
}
您应该考虑将其移至单独的数据对象,而不是Window类。