データバインディングに関する次の 4 点がわかりません。予期しない結果 (コード ビハインドの古いデータ) が得られたのか、それとも私が物事の仕組みを誤解した結果なのかはわかりません。
- テキストボックスを離れると、テキストボックスにバインドされたデータが更新されます。正確にこれを行うイベントは何ですか? 焦点を失った?
- コードビハインドで現在変更されているデータを使用すると、古いデータがまだ使用されているようです。なぜこうなった?ポイント3が理由でしょうか?
- テキストボックスの更新後、テストを行い、datacontext を何も設定せず、datacontext を同じソースに再送信しました。表示されている値は、編集前の値です。編集後に表示されたのに、再バインド後に古い値に戻ったのはなぜですか?
- 値を 2 回目に変更した後、コード ビハインドが最初の変更後にデータを使用しているようです。ポイント 3 のように再バインドすると、同じ結果になります (最初の変更後の値、2 番目の変更は無視されます)。コード ビハインドは常に 1 アップデート ビハインドのようですが、これを変更できますか?
なぜこれが起こるのか説明できる人はいますか?
望ましい動作:
住宅数を編集すると人数も更新されるようにしたい。その場で望ましいですが、フォーカスを失った後は問題ありません。フォーカスを失った場合、isle ID 0 の値は古い値ではなく、正しい値である必要があります。
理解を容易にするために、3 つの画面と関連するコード サンプルを含む図を示します。
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];
}