1

問題を解決するには、プログラムでデータをバインドする必要があると思います。

2 つのタブをホストする TabHost を使用します。TabHost が表示されたときに 2 番目のタブに MvxBindableListView をロードし、最初のタブを既定のタブとして保持する必要があります。

私がやっていることは、次のコードを使用してプロセスをチェックするため、問題なく 2 番目のタブ アクティビティを開始することです。

protected override void OnViewModelSet()
    {
        SetContentView(Resource.Layout.Page_ActivityView);
        System.Diagnostics.Debug.WriteLine("activityView started");

        MvxBindableListView mvxBindableListView = FindViewById<MvxBindableListView>(Resource.Id.mvxBindableListView);
        mvxBindableListView.ChildViewAdded += new System.EventHandler<Android.Views.ViewGroup.ChildViewAddedEventArgs>(mvxBindableListView_ChildViewAdded);
    }

「activityView started」が出力デバッガーに表示されますが、MvxBindableListView.ChildViewAdded イベントは発生せず、2 番目のタブをクリックしたときにのみ発生します。

したがって、MvxBindableListView はデータバインドされていないと思います。

プログラムで 2 番目のタブを読み込むのを手伝ってくれてありがとう。

4

1 に答える 1

1

ChildViewAddedListView がレンダリングされるときに発生するイベントだと思います-その時点で「リスト項目を描画する」必要がある場合、画面の子ビューのアダプターを要求します。リストを下にスクロールすると、追加の子ビューが要求されますが、ビューも再利用されます。そのため、単純なリストの場合、(できれば) N 個のアイテムを表示するリストの ChildViewAdded で N+1 呼び出しのみを取得する必要があります。一度。


したがって、リストがデータバインドされていても呼び出されない可能性は完全にありChildViewAdded、リストが「描画」されるまで呼び出されません。


悲しいことに、Xamarin ドキュメントはここでは役に立ちません - http://docs.mono-android.net/monodoc.ashx?link=E%3AAndroid.Views.ViewGroup.ChildViewAdded


注:実際にプログラムでバインドしたい場合は、Bind()メソッドと拡張メソッドを使用してこれを行うことができます。ただし、ここでは詳しく説明していません。実際に必要なものではないように思われるからです。

于 2012-10-25T17:32:44.630 に答える