Hei*_*tad 5 c# android mvvmcross xamarin mvxbind
我有一个ScrollView
最初包含两个MvxListView
控件.
其ListView
控制在一个ScrollView
不被安卓虽然,这是有道理的支持,因为他们都试图填补母公司的高度,并提供自己的滚动逻辑.
我想要的是两个不可滚动的列表,它们的全部高度在我的内部ScrollView
.如果不手动破解高度ListView
,MvxListView
扩展不支持此功能.
我想要这个的原因是因为我有两个单独的列表,我必须分开源,它们都有自己的标题.我需要所有这些都可以在一个内滚动ScrollView
.
然后我发现MvxLinearLayout
哪个是可绑定的LinearLayout
,它具有ItemSource
我可以绑定的属性.它工作得很好,它显示我的项目并获得所有项目的全部高度,所以我可以滚动我的列表ScrollView
.问题是它似乎没有ItemClick
属性,所以我无法从列表中获取用户输入.
有没有人知道以可绑定的方式做到这一点的干净方式?我不想onItemClick
在后面的代码中附加处理程序.还有另一个MvvmCross控件可以做我想要的吗?
Ond*_*unc 10
您可以扩展MvxLinearLayout以支持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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
适配器:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以绑定到ItemClick
就像你使用ListView
:
local:MvxBind="ItemClick SomeCommand"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1151 次 |
最近记录: |