我有两个“嵌套”DialogViewController——一个“视图”和一个“编辑”。两者都使用 StringElements 从内部数据结构呈现数据。在 Edit DVC 中,我挂钩 StringElement 的 Changed 事件以更新我的内部数据结构。我还挂钩了 Edit DVC 的 ViewDissapearing (sic) 事件以重新渲染 View DVC,并将编辑内容发送到云服务。
我的问题是在 ViewDissapearing 事件处理程序之后调用了 Changed 事件处理程序,因此我的内部数据结构没有及时更新。
设置 DVC 的代码如下所示:
var root = RenderViewItem(ThisItem);
var dvc = new DialogViewController(root, true);
// create an Edit button which pushes the edit view onto the nav stack
dvc.NavigationItem.RightBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Edit, delegate {
var editRoot = RenderEditItem(ThisItem, true /* render the list field */);
editViewController = new DialogViewController(editRoot, true);
editViewController.ViewDissapearing += (sender, e) =>
{
// trigger a sync with the service when the view disappears
App.ViewModel.SyncWithService();
// reload the View page
dvc.BeginInvokeOnMainThread(() =>
{
var oldroot = root;
root = RenderViewItem(ThisItem);
dvc.Root = root;
dvc.ReloadData();
oldroot.Dispose();
});
};
controller.PushViewController(editViewController, true);
});
// push the "view item" view onto the nav stack
controller.PushViewController(dvc, true);
在 RenderEditItem() 内部,我根据内部数据结构添加 StringElements,并按照通常的方式添加 Changed EventHandler:
stringElement.Changed += delegate { /* change a data structure */ };
有没有办法让 Changed 事件处理程序在 ViewDissapearing 事件处理程序之前触发?