0

「ネストされた」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イベントハンドラーを起動する方法はありますか?

4

1 に答える 1

0

朗報です!MonoTouch.Dialog バージョン 5.2.11 では、EntryElement.Changed イベントの発生方法が変更されました。フォーカスの変更が発生したときだけではなく、キーストロークごとに発生するようになりました。そのため、「競合状態」は発生しなくなり、NSTimer ハックを排除できるようになりました。

この変更による関連する利点は、EntryElement.FetchValue() を呼び出して EntryElement.Value が最新であることを確認する必要がなくなることです。

詳細については、 http://docs.xamarin.com/ios/releases/MonoTouch_5/MonoTouch_5.2#11を参照してください。

于 2012-05-02T05:45:01.193 に答える