2016-06-02 11 views
2

ich ein MvxRecyclerView in meinem Fragment bin mit:Wie an MvxRecyclerView ItemsSource über Code binden?

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<TextView 
    android:id="@+id/Headline" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="50dp" 
    android:text="My Headline" /> 
<MvvmCross.Droid.Support.V7.RecyclerView.MvxRecyclerView 
    android:id="@+id/RecyclerView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/Headline" 
    android:layout_marginTop="50dp" /> 
</RelativeLayout> 

Dies ist der Fragment-Code ist:

[MvxFragment(typeof(MainViewModel), Resource.Id.Main_ViewPager)] 
[Register("my.app.fragments.MyFragment")] 
public class MyFragment : BaseFragment<MyViewModel> 
{ 
    private MvxRecyclerView recyclerView; 

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     base.OnCreateView(inflater, container, savedInstanceState); 

     var view = this.BindingInflate(Resource.Layout.MyFragment, null); 

     this.recyclerView = view.FindViewById<MvxRecyclerView>(Resource.Id.RecyclerView); 
     this.recyclerView.ItemTemplateId = Resource.Layout.MyCell; 

     var set = this.CreateBindingSet<MyFragment, MyViewModel>(); 
     set.Bind(this.recyclerView).For(x => x.ItemsSource).To(x => x.Items); 
     set.Apply(); 

     return view; 
    } 
} 

Und das Ansichtsmodell:

public class MyViewModel : MvxViewModel 
{ 
    .... 

    private ObservableCollection<T> items; 
    public ObservableCollection<T> Items 
    { 
     get { return this.items; } 
     set 
     { 
      this.items = value; 
      this.RaisePropertyChanged(() => this.Items); 
     } 
    } 

    .... 
} 

Das Problem ist, dass die MvxRecyclerView tut keine Daten anzeigen. Aber es tut, wenn ich ItemTemplateId und Binding in axml (z. B. lokal: MvxItemTemplate = "...", lokal: MvxBind = "ItemsSource Items") definieren.

Mein Ziel ist nicht, es in axml zu definieren .. Ich möchte die Vorteile der Verwendung dieser Eigenschaften im Code (z. B. umbenennen oder Refactoring-Probleme) nutzen.

Ist es möglich, diese Bindungen in Code zu definieren?

+0

Können Sie das ViewModel freigeben? Der Code in deinem Fragment scheint korrekt zu sein. Vielleicht verwenden Sie keine ObservableCollection ? – Pilatus

+0

Ich habe die Frage bearbeitet und den interessanten Teil von MyViewModel hinzugefügt. Es ist eine ObservableCollection - auf iOS-Bindung funktioniert gut mit diesem ViewModel. –

+0

Gibt es Warnungen in der Ausgabe? – Pilatus

Antwort

1

Setzen Sie MvxItemTemplate in XML und erstellen Sie die Items-Bindung im Fragment.

Verwandte Themen