Używam MvvmCross w moim projekcie Xamarin Android. Mam MvxActivity
z MvxRecyclerView
, który mam przypisany szablon elementu w jego pliku układu.Jak używać płynnego API MvvmCross do powiązania TextView elementu RecyclerView z właściwością ViewModel na Androidzie?
<MvxRecyclerView
android:id="@+id/my_recycler_view"
local:MvxItemTemplate="@layout/item_recycler_view" />
ViewModel jest dość prosta, składa się tylko z jednej nieruchomości, który przechowuje dane do wyświetlenia w RecyclerView
:
public class MainViewModel : MvxViewModel
{
private IEnumerable<ViewModelItem> _viewModelItems;
public IEnumerable<ViewModelItem> ViewModelItems
{
get { return _viewModelItems; }
set { SetProperty(ref _viewModelItems, value); }
}
}
Generalnie lubię używać MvvmCross biegle API jak najwięcej, bo niejawnego wsparcia dla refaktoryzacji. Więc w mojej działalności, jestem wiązania własność MvxRecyclerView
tak:
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();
tej pory tak dobrze. Teraz plik układ szablonu poz zasadzie tylko zawiera TextView
:
<LinearLayout>
<TextView
android:id="@+id/innerText" />
</LinearLayout>
A moja ViewModelItem
klasy wygląda następująco:
public class ViewModelItem
{
public string Title { get; set; }
}
Moje pytanie jest teraz, w jaki sposób i gdzie mogę powiązać TextView.Text
właściwość do właściwości ViewModelItem.Title
przy użyciu płynnego interfejsu API?
Wiem, że dość łatwo jest zrobić bez płynnego API, podając atrybut MvxBind
w pliku układu szablonu przedmiotu, ale naprawdę wolałbym płynne rozwiązanie API.
Należy zwrócić uwagę, może chcesz przypisać polecenie przyciskiem myszy do twojego niestandardowego 'ViewHolder' inaczej żadne powiązanie z ItemClick nie będzie miało żadnego wpływu.Przykład w [this stackoverflow answer] (http://stackoverflow.com/questions/42938112/mvxrecyclerview-fluent-api-binding#answer-43055796). – Plac3Hold3r