【发布时间】:2010-03-16 01:42:05
【问题描述】:
我有一个自定义对象 Foo,它带有一个名为 Flagged 的布尔属性,当有人在文本框中成功键入内容时,它会将 flagged 更改为 true,并用一些文本更新屏幕上的另一个文本块。问题是我可以让它加载初始数据,但是当用户成功输入一些东西来翻转标志时没有任何反应。
我必须在后面的代码中完成大部分工作,并且我已经在我的对象 Foo 上实现了 INotifyPropertyChanged。我下面的代码有什么问题?
谢谢。
private Border CreateNewBorder()
{
Border b = new Border();
TextBlock tb = new TextBlock();
tb.TextAlignment = TextAlignment.Center;
b.Style = (Style)this.FindResource("myBorder");
tb.SetBinding(TextBlock.TextProperty, CreateBinding());
b.Child = tb;
return b;
}
private Binding CreateBinding()
{
Binding bind = new Binding();
bind.Source = Foo;
bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
bind.Mode = BindingMode.TwoWay;
bind.Path = new PropertyPath("Flagged");
bind.Converter = new BoolToStringConverter();
return bind;
}
【问题讨论】:
-
您是否在调试器中验证了用户键入时已将 Flagged 设置为 true?在 CreateBinding() 中用作 Source 的 Foo 对象是否与用户键入时正在更新的实例相同?您可以发布 Foo 代码的相关位吗?
-
另请注意,在 TextBlock.Text 绑定上设置 UpdateSourceTrigger(或 Mode=TwoWay)是没有意义的——用户无法键入 TextBlock,因此永远不会有任何更新可推回到绑定源。
标签: wpf data-binding updatesourcetrigger