1

我想我需要以編程方式綁定數據來解決我的問題。MvvmCross:以編程方式數據綁定

我使用託管2個選項卡的TabHost。 我需要加載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不是數據綁定。

在此先感謝,以幫助我以編程方式加載我的第二個選項卡。

+0

我不太瞭解問題描述。你能解釋更多(顯示更多的代碼?)關於你如何動態添加標籤?關於爲什麼你需要以編程方式執行ChildViewAdded調用? – Stuart

回答

1

我認爲ChildViewAdded是ListView呈現時發生的事件 - 當時它需要'繪製列表項',那麼它將要求它的適配器爲屏幕的子視圖。當你向下滾動列表時,它會要求更多的子視圖 - 但它也會重用視圖 - 所以對於一個簡單的列表,你應該只有(希望)在ChildViewAdded上獲得N + 1個調用,一次。


所以這是完全有可能將數據綁定列表,但從來沒有叫ChildViewAdded - 將不會被調用,直到列表「繪製」


可悲的是Xamarin文檔是不這裏有幫助 - http://docs.mono-android.net/monodoc.ashx?link=E%3AAndroid.Views.ViewGroup.ChildViewAdded


注意:如果你真的想以編程方式綁定,那麼你可以做這 - 使用Bind()方法和擴展方法。但是,我沒有在這裏擴展 - 因爲它聽起來並不像你想要的那樣!

+0

我正在使用ChildViewAdded從listItem中獲取數據並獲取UIControl,但是您告訴我這樣做是錯誤的方式:void mvxBindableListView_ChildViewAdded(object sender,Android.Views.ViewGroup.ChildViewAddedEventArgs e) { MvxBindableListView mvxBindableListView = (MvxBindableListView)發送者; int indexOfChild = mvxBindableListView.IndexOfChild(e.Child); Customer customer = ViewModel.DataStore.GetCustomerFromIndex(indexOfChild); \t TextView textViewCustomer = e.Child.FindViewById (Resource.Id.textViewCustomer); – Alphapage

+0

問題是我想加載整個MvxBindableListView以獲得每個ListItem中的UIControl,這似乎是不可能的,因爲只有屏幕上顯示的視圖可用。 – Alphapage

+0

你可以按照這裏的討論:http://stackoverflow.com/questions/13075521/monodroid-listview-load-the-entire-listview-in-background-and-get-an-uicontrol – Alphapage

相關問題