2011-02-18 53 views
2

我想使用單擊對話框作爲不可編輯的數據顯示某些數值。但是調用DialogViewController.ReloadData不會更新綁定對象的數據。Monotouch-Dialog ReloadData不重新加載數據?


class AccountFormModel 
{ 
     [Section("Account data", "")] 

     [Caption("Balance")] 
     public string balance; 
} 
... 
private void InitComponents() 
{ 
      accountFormModel = new AccountFormModel(); 
      accountFormModel.balance = "TestTestTest"; 
      bc = new BindingContext(this, accountFormModel, "AccountData"); 
      dialogViewController = new DialogViewController(bc.Root); 
      dialogViewController.Autorotate = true; 
} 

private void RefreshData() 
{ 
      string b = SomeDatasource.Account.Balance.ToString("N4"); 
      accountFormModel.balance = "$" + b; 
      dialogViewController.ReloadData(); 
} 

調試表明accountFormModel.balance在refreshData方法被設置爲正確的值,但沒有在模擬器上的形式變化(保持TestTestTest)。我做錯了什麼?

回答

3

DialogViewController在使用反射時最初會執行一次綁定,並且只有當您的FetchData()是將數據傳回給您的類時。

會發生什麼情況是,BindingContext基本上會根據您的數據(此例中爲balance)創建模型,從而有效地製作此時的數據副本。當你調用ReloadData()時,這是從副本重新加載數據,這就是爲什麼你沒有看到變化。儘管可以改變這種方式來在BindingContex上重新填充數據,但目前情況並非如此。

MonoTouch.Dialog的Reflection API非常有限,我強烈建議您,對於任何非平凡的東西,您都使用Elements API。 MonoTouch.Dialog中的大部分示例都使用該API,因爲它使您可以完全控制對話框。

+0

嘿米格爾,所以如果我有一個大對象的列表(大約1000),我試圖建立一個大的可滾動列表,或許Dialog不是最適合的工具?我廣泛使用SyleStringElement,即使在Root.Add(mySection)調用完成後,它也需要大約3-4秒才能呈現UITableView(在3GS設備上)。我可以很輕鬆地重寫GetCell來完成同樣的事情,而不使用Dialog。如果我將它理解爲意味着Dialog不適合使用Elements API呈現大型列表,我是否正確理解了您的答案? – NovaJoe 2011-04-11 15:36:42

相關問題