Monotouch对话框 - 在返回时修改行详细信息而不更新列表后重新加载数据列表

时间:2012-12-12 03:09:22

标签: xamarin.ios monotouch.dialog

单击某个项目时,会打开一个详细信息视图控制器,如果用户单击“保存”,则会进行一些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;
    }

1 个答案:

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

希望这有助于。