You can extend MvxLinearLayout to support ItemClick :
public class MvxClickableLinearLayout : MvxLinearLayout { public MvxClickableLinearLayout(Context context, IAttributeSet attrs) : this(context, attrs, new MvxClickableLinearLayoutAdapter(context)) { } public MvxClickableLinearLayout(Context context, IAttributeSet attrs, MvxClickableLinearLayoutAdapter adapter) : base(context, attrs, adapter) { var mvxClickableLinearLayoutAdapter = Adapter as MvxClickableLinearLayoutAdapter; if (mvxClickableLinearLayoutAdapter != null) { mvxClickableLinearLayoutAdapter.OnItemClick = OnItemClick; } } public ICommand ItemClick { get; set; } public void OnItemClick(object item) { if (ItemClick != null && ItemClick.CanExecute(item)) { ItemClick.Execute(item); } } }
Adapter:
public class MvxClickableLinearLayoutAdapter : MvxAdapterWithChangedEvent, View.IOnClickListener { public delegate void ItemClickDelegate(object item); public ItemClickDelegate OnItemClick; public MvxClickableLinearLayoutAdapter(Context context) : base(context) { } public void OnClick(View view) { var mvxDataConsumer = view as IMvxDataConsumer; if (mvxDataConsumer != null && OnItemClick != null) { OnItemClick(mvxDataConsumer.DataContext); } } protected override View GetView(int position, View convertView, ViewGroup parent, int templateId) { View view = base.GetView(position, convertView, parent, templateId); view.SetOnClickListener(this); return view; } }
Now you can bind to ItemClick in the same way as to ListView :
local:MvxBind="ItemClick SomeCommand"
source share