「ネストされた」DialogViewControllersが2つあります。「View」と「Edit」です。どちらも、StringElementsを使用して内部データ構造からデータをレンダリングします。Edit DVCで、StringElementのChangedイベントをフックして、内部データ構造を更新します。また、Edit DVCのViewDissapearing(sic)イベントをフックして、View DVCを再レンダリングし、編集内容をクラウドサービスに送信します。
私の問題は、ChangedイベントハンドラーがViewDissapearingイベントハンドラーの後に呼び出されるため、内部データ構造が時間内に更新されないことです。
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を追加し、通常の方法でChangedEventHandlerを追加します。
stringElement.Changed += delegate { /* change a data structure */ };
ViewDissapearingイベントハンドラーの前にChangedイベントハンドラーを起動する方法はありますか?