我为Android使用MvvmCross,并且创建了一个ViewModel,并希望将标签属性传递给ViewModel。 我该怎么办?
以下是示例:
<LinearLayout
android:id="@+id/productsLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/products_category"
android:gravity="center"
android:orientation="vertical"
android:tag="93ada18e-1280-4a80-bc39-9b9f6d5b9724"
local:MvxBind="Click ShowCategoryCommand">
可能几乎没有带有硬编码标签属性的布局,我需要检测点击了哪个布局并将标签发送给另一个ViewModel
答案 0 :(得分:2)
简单的答案应该是:
local:MvxBind="Click ShowCategoryCommand, CommandParameter=93ada18e-1280-4a80-bc39-9b9f6d5b9724"
使用MvxRecyclerView
可能可以更好地解决此问题。您可以建立绑定到MvxRecyclerView
的视图模型的列表,然后使用MvxAsyncCommand<MyItemViewModel>
知道选择了哪种视图模型。
<MvxRecyclerView
local:MvxBind="ItemsSource MyList; ItemClick MyModelClicked"
local:MvxItemTemplate="@layout/mymodelitemview" />
以下是MvxRecyclerView的nuget包:https://www.nuget.org/packages/MvvmCross.Droid.Support.V7.RecyclerView
答案 1 :(得分:0)
您可以尝试类似的方法。这会起作用,但我不知道这是否是最佳解决方案。
// in OnCreateView method in your Fragment
var productLayout = _view.FindViewById<LinearLayout>(Resource.Id.productsLayout);
productLayout.Click += OnClick;
// OnClick method in your Fragment
private void OnClick(object sender, EventArgs e)
{
var linearLayout = (LinearLayout)sender;
var tag = linearLayout.Tag;
ViewModel.ShowCategoryCommand(tag);
}
// ShowCategory method in your ViewModel
public void ShowCategoryCommand(string tag)
{
// some code...
}