Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin.ios Monotouch对话框重新加载数据不重新加载数据?_Xamarin.ios_Monotouch.dialog - Fatal编程技术网

Xamarin.ios Monotouch对话框重新加载数据不重新加载数据?

Xamarin.ios Monotouch对话框重新加载数据不重新加载数据?,xamarin.ios,monotouch.dialog,Xamarin.ios,Monotouch.dialog,我想使用monotouch对话框作为某些数值的不可编辑数据显示。但调用DialogViewController.ReloadData不会更新绑定对象中的数据 class AccountFormModel { [Section("Account data", "")] [Caption("Balance")] public string balance; } ... private void InitComponents() {

我想使用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设置为正确的值,但在模拟器中的表单上并没有任何更改(保持TestTest)。我做错了什么?

DialogViewController在使用反射时最初只进行一次绑定,并且只有在您获取数据()时,数据才会传输回类

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


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

嘿,Miguel,如果我有一个大列表(大约1000个)的对象,我正试图用这些对象构建一个大的可滚动列表,那么Dialog可能不是最合适的工具?我广泛使用SyleStringElement,渲染UITableView(在3GS设备上)大约需要3-4秒,即使在对Root.Add(mySection)的调用完成之后也是如此。我可以很容易地重写GetCell来完成同样的事情,而无需使用Dialog。如果我将其解释为Dialog不适合使用Elements API呈现大型列表,那么我是否正确理解了您的回答?如果用户选择“取消”表单,仍然需要重新加载数据。没关系。我发现我做错了什么。我创建了一个根元素,然后向其中添加了一个节。由LINQ select创建的节及其所有子元素,但不是根元素。事实证明,当LINQ select中包含根元素的创建时,整个操作都非常快……就像MonoTouch.Dialog项目页面示例中Miguel的示例一样。