我使用线程this中描述的以下代码在ListView中单击LinearLayout时执行事件。它曾经完美地工作,但在更新到MvvmCross 5之后,它不再工作了,因为mvxDataConsumer在解析为IMvxDataConsumer时变为空,我找不到原因?ItemClick for MvxLinearLayout? MvvmCross 5
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);
}
}
}
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;
}
}
axml:
<Controls.MvxClickableLinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
local:MvxBind="ItemsSource Items;ItemClick GoToCommand"
local:MvxItemTemplate="@layout/main_list_item" />
您可以添加用于设置MvxLinearLayout适配器的代码行吗? – nmilcoff