android - 如何通过代码绑定(bind)到 MvxRecyclerView ItemsSource?

标签 android xamarin binding mvvmcross

我在 fragment 中使用了 MvxRecyclerView:

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

这是 fragment 代码:

[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 不显示任何数据。 但它确实如此,当我在 axml 中定义 ItemTemplateId 和 Binding 时(例如 local:MvxItemTemplate="...", local:MvxBind="ItemsSource Items")。

我的目标不是在 axml 中定义它。我想利用在代码中使用这些属性的优势(例如重命名或重构问题)。

是否可以在代码中定义这些绑定(bind)?

最佳答案

在 xml 中设置 MvxItemTemplate 并在 fragment 中创建项目绑定(bind)。

关于android - 如何通过代码绑定(bind)到 MvxRecyclerView ItemsSource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37603630/

相关文章:

android - 从 Cordova 中的硬件键盘输入(使用 Angular 和 Ionic)

android - 获取 sharedpreferences 文件的文件路径

c# - 具有多个参数的 SignalR 客户端

Xamarin 读取共享项目中的文件

WPF文本框绑定(bind)在再次向前和向后导航后消失

Android加速度计校准?

android - Android 上的法拉盛和 SQLite 数据库

c# - 如何使用 visual studio 和 xamarin 关闭 android Activity

binding - 早期绑定(bind)和后期绑定(bind)有什么区别?

javascript - Polymer - 将事件绑定(bind)到动态创建的元素