1

单击项目时,会打开一个详细信息视图控制器,如果用户单击保存,则该控制器会调用一些 Web 服务来保存数据(这很好用)。我遇到的问题是当用户单击返回以返回列表时保存数据后,列表项(即,如果名称已更新)未更新。因此,也许用户更改了名称,因此应该更新之前的列表,我想更新该值,而不必进行另一个 Web 服务调用来重新填充。

当视图出现时我正在打电话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;
    }
4

1 回答 1

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);

希望这可以帮助。

于 2013-03-07T10:17:14.787 回答