War*_*pin 51 data-binding wpf textbox
我有这门课:
public partial class Window1 : Window
{
public String Name2;
public Window1()
{
InitializeComponent();
Name2 = new String('a', 5);
myGrid.DataContext = this;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
我想Name2在文本框中显示字符串.
<Grid Name="myGrid" Height="437.274">
<TextBox Text="{Binding Path=Name2}"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)
但是不显示字符串.此外,如果Name2使用a定期更新字符串,是否TimerCallback需要执行任何操作以确保在数据更改时更新文本框?
ito*_*son 76
Name2是一个字段.WPF仅绑定到属性.将其更改为:
public string Name2 { get; set; }
Run Code Online (Sandbox Code Playgroud)
请注意,使用此最小实现,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");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您应该考虑将其移动到单独的数据对象而不是Window类.
您的窗口没有实现网格将其用作数据源所需的必要数据绑定通知,即INotifyPropertyChanged接口.
您的"Name2"字符串也需要是属性而不是公共变量,因为数据绑定用于属性.
可以在此处找到将对象用作数据源的必要接口.
小智 6
只是为了将来的需要.
在带有.NET Framework 4.5的Visual Studio 2013中,对于窗口属性,请尝试添加ElementName=window以使其工作.
<Grid Name="myGrid" Height="437.274">
<TextBox Text="{Binding Path=Name2, ElementName=window}"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
195878 次 |
| 最近记录: |