1

Je pense que j'ai besoin de lier des données par programme pour résoudre mon problème. J'utilise un tabHost qui héberge 2 onglets. J'ai besoin de charger le MvxBindableListView dans le second onglet lorsque TabHost apparaît et garder le premier onglet comme onglet par défaut.MvvmCross: liaison de données par programme

Ce que je fais est à partir de la deuxième activité de l'onglet sans problème parce que je vérifie le processus en utilisant ce code:

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 commencé » est affiché dans le débogueur de sortie, mais l'événement MvxBindableListView.ChildViewAdded n » t soulevé, seulement quand je clique sur le deuxième onglet.

Donc je suppose que MvxBindableListView n'est pas databound.

Merci d'avance de m'aider à charger mon deuxième onglet par programmation.

+0

Je ne comprends pas vraiment la description du problème. Pouvez-vous expliquer plus (montrer plus de code?) Sur la façon dont vous ajoutez dynamiquement les onglets? Et pourquoi vous devez effectuer cet appel ChildViewAdded par programme? – Stuart

Répondre

1

Je pense ChildViewAdded est un événement qui se produit lorsque le ListView est rendu - à ce moment où il doit «dessiner des éléments de la liste», alors il va demander à son adaptateur pour les vues enfant pour l'écran. Au fur et à mesure que vous descendez dans la liste, il vous demandera plus de vues enfant - mais il réutilisera également les vues - donc pour une simple liste vous devriez seulement (espérons-le) recevoir des appels N + 1 sur ChildViewAdded pour une liste qui affiche N éléments une fois.


Il est tout à fait possible pour une liste à DataBound mais jamais appeler ChildViewAdded - qui ne sera pas appelé jusqu'à ce que la liste est « tirée »


Malheureusement, les documents ne sont pas Xamarin utile ici - http://docs.mono-android.net/monodoc.ashx?link=E%3AAndroid.Views.ViewGroup.ChildViewAdded


Remarque: si vous ne voulez vraiment lier programatically, alors vous pouvez le faire à - en utilisant des méthodes et Bind() méthodes d'extension. Cependant, je n'ai pas développé cela ici - car il ne semble pas que ce soit vraiment ce dont vous avez besoin!

+0

j'utilisais ChildViewAdded pour obtenir des données de la listItem et obtenir le UIControl mais vous me dire que c'est la mauvaise façon de le faire comme ceci: void mvxBindableListView_ChildViewAdded (expéditeur d'objet, Android.Views.ViewGroup.ChildViewAddedEventArgs e) { MvxBindableListView mvxBindableListView = (MvxBindableListView) expéditeur; int indexOfChild = mvxBindableListView.IndexOfChild (e.Enfant); Client client = ViewModel.DataStore.GetCustomerFromIndex (indexOfChild); \t TextView textViewCustomer = e.Child.FindViewById (Ressource.Id.textViewCustomer); – Alphapage

+0

Le problème est que je veux charger l'ensemble MvxBindableListView pour obtenir un UIControl à l'intérieur de chaque ListItem qui semble impossible car seules les vues affichées à l'écran sont disponibles. – Alphapage

+0

Vous pouvez suivre la discussion ici: http: //stackoverflow.com/questions/13075521/monodroid-listview-load-the-entire-listview-in-background-and-get-an-uicontrol – Alphapage

Questions connexes