2

我想使用单点触控对话框作为某些数值的不可编辑数据显示。但是调用 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)。我做错了什么?

4

1 回答 1

3

DialogViewController 在使用反射时最初会绑定一次,并且只有当您 FetchData() 时才会将数据传输回您的类。

发生的情况是 BindingContext 将基本上从您的数据创建模型(在这种情况下为平衡),此时有效地复制您的数据。当您调用 ReloadData() 时,这是从副本中重新加载数据,这就是您看不到变化的原因。虽然这可以更改为在 BindingContex 上有一些方法来重新填充数据,但目前情况并非如此。

MonoTouch.Dialog 的反射 API 非常有限,我强烈建议您对于任何重要的事情,您都可以使用 Elements API。MonoTouch.Dialog 中的大多数示例都使用该 API,因为它使您可以完全控制对话框。

于 2011-02-19T15:55:40.603 回答