我有一个列表视图,我在Xamarin表单中弹出,如果有人在框外点击,我想要隐藏。我在列表视图的父布局上有一个轻击手势识别器来处理它。在Android中,一切都很好。如果我单击关闭,它会关闭,但如果我单击列表视图中的元素,它会正确选择它。在iOS中,恰恰相反。布局上的手势处理程序首先触发并关闭列表视图,而不正确选择项目。
所以我的问题是,有没有办法改变事件被触发的顺序?如果没有,是否有更好的替代方案来实现我的目标?谢谢!
答案 0 :(得分:1)
如果您使用ListView.ItemSelected
或ListView.ItemTapped
,那么前几天我遇到了完全相同的问题。我的修复是不使用其中任何一个,而是将TapGestureRecognizer
附加到ViewCell
内的ListView
。我还向ViewCell绑定的对象添加了IsSelected
属性,以便在单击项目后可以更改项目的背景颜色。
public class SomePage : ContentPage {
private SomeModel _selectedModel; //It would be best to put this into your ViewModel
...
public SomePage() {
ListView list = new ListView {
ItemTemplate = new DataTemplate(() => {
ViewCell cell = new ViewCell {
View = new ContentView()
};
cell.View.GestureRecognizers.Add(new TapGestureRecognizer {
Command = new Command(() => {
if(_selectedModel != null) { _selectedModel.IsSelected = false; }
SomeModel model = (SomeModel)cell.BindingContext;
model.IsSelected = true;
_selectedModel = model;
})
}
return cell;
}
}
}
}