【发布时间】:2013-11-14 17:15:16
【问题描述】:
我不理解以下关于数据绑定的 4 点。不知道我是否得到了意外的结果(代码中的过时数据),或者这只是我误解了事情是如何工作的结果。
- 当我离开文本框时,绑定到文本框的数据会更新。什么活动 究竟是这样做的?失去焦点?
- 在后面的代码中使用现在更改的数据时 它似乎仍在使用旧数据。为什么会这样?可以 第 3 点是什么原因?
- 文本框更新后,我进行了测试并设置了数据上下文 什么都没有,并将数据上下文重新应用于同一来源。价值 显示的是我编辑它们之前的值。为什么他们在编辑后出现了,但是 重新绑定后返回旧值?
- 在第二次更改值后似乎 喜欢后面的代码在我第一次更改后使用数据。重新绑定喜欢 在第 3 点导致相同的结果(第一次更改后的值, 第二个更改被忽略)。似乎后面的代码总是落后一个更新,我可以更改吗?
谁能解释为什么会发生这种情况?
期望的行为:
我希望在我编辑住房数量时更新人口数量。最好在飞行中,但在失去焦点后很好。当失去焦点时,岛 ID 0 的值应该是正确的值,而不是过时的值。
为了便于理解,一张三屏图片及相关代码示例。
http://www.mathematik-lehramtsstudium.de/BindingExample.jpg
我的班级:
//class for isles
public class isle : INotifyPropertyChanged
{
//Dummyvariables,...
private int _intBauer;
private int _intBauerBev;
//variables
public int intIsleID { set; get; } //isle ID
public string strName { set; get; } //isle name
public int intBauer //housing count
{
set
{
this._intBauer = value;
NotifyPropertyChanged("intBauer"); NotifyPropertyChanged("intBauerBev");
}
get
{
return _intBauer;
}
}
public int intBauerBev //each house hosts 8 people
{
set { this._intBauerBev = value;}
get { return intBauer * 8; }
}
protected void NotifyPropertyChanged(String propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
LostFocus-更新页面右侧的事件
private void textboxHäuser_LostFocus(object sender, RoutedEventArgs e)
{
//Gesamtzahl neu berechnen
listIsles[0].intBauer = 0;
for (int i = 1; i < 10; i++)
{
listIsles[0].intBauer += listIsles[i].intBauer;
}
//hard refresh DataContext, since it does not seem to update itself
//leaving these two lines out of my code changes nothing tho, as expected
gridInfoGesamt.DataContext = "";
gridInfoGesamt.DataContext = listIsles[0];
}
【问题讨论】:
-
您可以阅读所有关于问题 1 here 的答案。如果您的 UI 没有更新您的视图模型,则绑定有问题。发布您的 XAML。如果你的 UI 正在更新你的视图模型,那么在你的属性的设置器中对它做出反应显然要容易得多,或者由于某种原因失败了,通过处理你的视图模型的 PropertyChanged 事件。
-
感谢您的评论。我似乎找到了正确的页面并在您打字时解决了我自己的问题。您对问题 1 的链接确实更详细地解释了这一点,我会仔细阅读它几次,以确保我将来不会再次陷入这个陷阱。再次感谢!
标签: c# wpf data-binding