MvvmCross: привязка данных программно

Я думаю, что мне нужно связать данные программно, чтобы решить мою проблему.

Я использую TabHost, который размещает 2 вкладки. Мне нужно загрузить MvxBindableListView во второй вкладке, когда появляется TabHost, и оставить первую вкладку в качестве вкладки по умолчанию.

Что я делаю, так это запускаю вторую вкладку без проблем, потому что я проверяю процесс с помощью этого кода:

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 запущен" отображается в выходном отладчике, но событие MvxBindableListView.ChildViewAdded не возникает, только когда я нажимаю на вторую вкладку.

Поэтому я предполагаю, что MvxBindableListView не привязан к данным.

Заранее спасибо, чтобы помочь мне загрузить мою вторую вкладку программно.

1 ответ

Решение

Я думаю ChildViewAdded это событие, которое происходит при рендеринге ListView - в то время, когда ему нужно "нарисовать элементы списка", он запрашивает у своего адаптера дочерние представления для экрана. Когда вы прокручиваете список вниз, он будет запрашивать больше дочерних представлений - но он также будет повторно использовать представления - поэтому для простого списка вы должны когда-либо (надеюсь) получить только N+1 вызовы для ChildViewAdded для списка, который показывает N элементов в один раз.


Таким образом, вполне возможно, что список будет привязан к данным, но никогда не вызывать ChildViewAdded - это не будет вызвано, пока список не "нарисован"


К сожалению, документы Xamarin здесь не помогают - http://docs.mono-android.net/monodoc.ashx?link=E%3AAndroid.Views.ViewGroup.ChildViewAdded


Примечание: если вы действительно хотите привязать программно, то вы можете сделать это с помощью Bind() методы и методы расширения. Тем не менее, я не стал подробно останавливаться на этом здесь - так как это не похоже на то, что вам действительно нужно!

Другие вопросы по тегам