我不理解關於數據綁定的以下4點。不知道如果我得到意想不到的結果(代碼背後的過時數據),或者如果這只是我誤解了事情工作的結果。使用過時值進行數據綁定更新
- 當我離開文本框時將數據綁定到文本框更新。什麼事件 確切地這樣做?引發LostFocus?
- 當在 後面的代碼中使用現在更改的數據時,它似乎仍使用OLD數據。這是爲什麼發生?可以 點3是原因嗎?
- 在文本框更新之後,我做了一個測試,並將datacontext 設置爲空,並將datacontext重新設置爲同一個scource。顯示的值爲 是我編輯它們之前的值。爲什麼在編輯後顯示,但 重新綁定後返回到舊值?
- 第二次更改值後,似乎 像後面的代碼使用我第一次更改後的數據。在點3中重新排列如 導致相同的結果(第一次更改後的值, 第二次更改被忽略)。似乎背後的代碼總是一個更新背後,我可以改變這個嗎?
任何人都能解釋爲什麼會發生這種情況?
期望的行爲:
我希望人們指望更新,當我編輯的住房數量。在飛行中更好,但在失去焦點後很好。失去焦點時,島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];
}
您可以閱讀所有關於問題1的答案[這裏](http://msdn.microsoft.com/en-us/library/ms754356%28v=vs.110%29.aspx)。 如果你的UI沒有更新你的視圖模型,那麼綁定有問題。發佈您的XAML。如果你的UI *更新你的視圖模型,那麼在你的屬性設置器中對它做出反應顯然要容易得多,或者由於某種原因,通過處理你的視圖模型的PropertyChanged事件而失敗。 – mcwyrm
感謝您的評論。我似乎找到了正確的頁面,並在打字時解決了我自己的問題。你和問題1的聯繫確實可以更詳細地解釋這一點,我會多讀幾遍,以確保在未來我不會陷入這個陷阱。再次感謝! – Rattenmann