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()
методы и методы расширения. Тем не менее, я не стал подробно останавливаться на этом здесь - так как это не похоже на то, что вам действительно нужно!