MvvmCross将数据从xml传递到android

时间:2018-07-12 19:17:48

标签: android xamarin xamarin.android mvvmcross

我为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

2 个答案:

答案 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...
}