Я использую MvvmCross в моем Xamarin Android проект. У меня есть MvxActivity
с MvxRecyclerView
, что я назначил шаблон элемента в его файле макета.Как использовать свободно распространяемый API MvvmCross для привязки TextView элемента RecyclerView к свойству ViewModel на Android?
<MvxRecyclerView
android:id="@+id/my_recycler_view"
local:MvxItemTemplate="@layout/item_recycler_view" />
ViewModel довольно прост, он состоит только из одного свойства, который содержит данные для отображения в RecyclerView
:
public class MainViewModel : MvxViewModel
{
private IEnumerable<ViewModelItem> _viewModelItems;
public IEnumerable<ViewModelItem> ViewModelItems
{
get { return _viewModelItems; }
set { SetProperty(ref _viewModelItems, value); }
}
}
Вообще мне нравится использовать свободно API MvvmCross как можно больше, потому что неявной поддержки рефакторинга. Так что в моей деятельности, я связывание свойства MvxRecyclerView
так:
var recyclerView = View.FindViewById<MvxRecyclerView>(Resource.Id.my_recycler_view);
var set = this.CreateBindingSet<MainView, MainViewModel>();
set.Bind(recyclerView)
.For(v => v.ItemsSource)
.To(vm => vm.ViewModelItems);
set.Apply();
До сих пор так хорошо. Теперь файл макета для шаблона элемента в основном только содержит TextView
:
<LinearLayout>
<TextView
android:id="@+id/innerText" />
</LinearLayout>
И мой ViewModelItem
класс выглядит следующим образом:
public class ViewModelItem
{
public string Title { get; set; }
}
Мой вопрос теперь, как и где я могу связать TextView.Text
собственности на имущество ViewModelItem.Title
с использованием свободного API?
Я знаю, что это довольно легко сделать без свободного API, предоставив атрибут MvxBind
в файле макета шаблона элемента, но я бы предпочел свободное решение API.
Одно замечание, вы можете назначить команду щелчком мыши над к вашему пользовательскому 'ViewHolder', то никакая привязка к ItemClick не повлияет.Пример в [этот ответ stackoverflow] (http://stackoverflow.com/questions/42938112/mvxrecyclerview-fluent-api-binding#answer-43055796). – Plac3Hold3r