我想使用monotouch对话框作为某些数值不可编辑的数据显示。但是调用DialogViewController.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();
}
调试显示,refreshData方法中的accountFormModel.balance设置为正确的值,但在模拟器中的表单上没有任何变化(保持TestTestTest)。我做错了什么?
答案 0 :(得分:3)
DialogViewController在使用反射时最初会进行绑定,并且只有当你将FetchData()传回给你的类时才会这样做。
BindingContext基本上会根据您的数据创建模型(在这种情况下是平衡),此时有效地制作数据副本。当您调用ReloadData()时,这将从副本重新加载数据,这就是您没有看到更改的原因。虽然可以更改为在BindingContex上使用某些方法来重新填充数据,但目前情况并非如此。
MonoTouch.Dialog的Reflection API非常有限,我强烈建议您,对于任何非平凡的事情,您都使用Elements API。 MonoTouch.Dialog中的大多数示例都使用该API,因为它可以让您完全控制对话框。