2016-06-02 1 views
2

Я использую MvxRecyclerView в моем фрагменте:Как связать с MvxRecyclerView ItemsSource через код?

<?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> 

Это фрагмент кода:

[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; 
    } 
} 

И ViewModel:

public class MyViewModel : MvxViewModel 
{ 
    .... 

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

    .... 
} 

Проблема заключается в том, что MvxRecyclerView делает не отображать никаких данных. Но это так, когда я определяю ItemTemplateId и Binding в axml (например, local: MvxItemTemplate = "...", local: MvxBind = "ItemsSource Items").

Моя цель - не определять его в axml. Я хочу воспользоваться преимуществами использования этих свойств в коде (например, переименование или рефакторинг).

Можно ли определить эти привязки в коде?

+0

Не могли бы вы поделиться ViewModel? Код в вашем фрагменте кажется правильным. Может быть, вы не используете ObservableCollection ? – Pilatus

+0

Я отредактировал вопрос и добавил интересную часть MyViewModel. Это ObservableCollection - на привязке iOS отлично работает с этой ViewModel. –

+0

Есть ли предупреждения в выводе? – Pilatus

ответ

1

Установите MvxItemTemplate в xml и создайте привязку элементов в фрагменте.