单击某个项目时,会打开一个详细信息视图控制器,如果用户单击“保存”,则会进行一些Web服务调用以保存数据(这样可以正常工作)。我遇到的问题是在用户点击返回列表时保存数据后,列表项(即名称已更新)未更新。因此,也许用户更改名称,因此应该更新先前的列表,我想更新值而不必再次进行webservice调用以重新填充。
我在视图出现时调用this.ReloadData()
,但这似乎永远不会更新列表名称。我已经检查了workouts
这是一个对象列表,它已被详细控制器修改过,但是重新加载数据似乎没有做任何事情。
如果另一个控制器修改了对象列表,如何刷新数据。
public override void ViewWillAppear (bool animated)
{
InvokeOnMainThread (delegate {
this.ReloadData();
}); // call reload on main thread
base.ViewWillAppear (animated);
}
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
workouts = manager.GetWorkouts(Helpers.User.Auth);
var sections = new Section();
var root = new RootElement("Workouts"){sections};
foreach (var wo in workouts) {
var tempwo = wo;
var wodetail = new RootElement(wo.Name, delegate {
var W = new WorkoutViewModel(tempwo);
var p = new WorkoutDetailController(W, tempwo);
return p;
});
sections.Add (wodetail);
}
Root = root;
}
答案 0 :(得分:1)
当您从自定义对象中分配元素的值时,似乎是这样的:
AccountDetailsSection = new Section ("Details"){
new StringElement ("Code:", _Account.Code),
new StringElement ("Name:", _Account.Name) };
您获得了所需的结果,但该元素将指针丢失回对象的属性。因此,如果您稍后更改属性的值,例如:
_Account.Code = "xxx";
重新加载数据不会做任何事情。您应该像这样手动更新值:
(AccountDetailsSection.Elements [0] as StringElement).Value = "xxx";
this.Root.Reload ( AccountDetailsSection, UITableViewRowAnimation.Fade);
希望这有助于。