我不理解以下关于数据绑定的 4 点。不确定我是否得到了意外的结果(后面的代码中的数据过时),或者这只是我误解了事情是如何工作的结果。
- 当我离开文本框时,将数据绑定到文本框更新。这到底是什么事件?失去焦点?
- 在后面的代码中使用现在更改的数据时,它似乎仍然使用旧数据。为什么会这样?第3点可能是原因吗?
- 在文本框更新后,我进行了测试并将 datacontext 设置为空,并将 datacontext 重新设置为同一个源。显示的值是我编辑它们之前的值。为什么他们编辑后显示,但重新绑定后恢复到旧值?
- 第二次更改值后,后面的代码似乎使用了我第一次更改后的数据。像第 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-Event
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];
}