Xamarin

时间:2016-08-17 21:48:06

标签: xamarin xamarin.forms

我有一个列表视图,我在Xamarin表单中弹出,如果有人在框外点击,我想要隐藏。我在列表视图的父布局上有一个轻击手势识别器来处理它。在Android中,一切都很好。如果我单击关闭,它会关闭,但如果我单击列表视图中的元素,它会正确选择它。在iOS中,恰恰相反。布局上的手势处理程序首先触发并关闭列表视图,而不正确选择项目。

所以我的问题是,有没有办法改变事件被触发的顺序?如果没有,是否有更好的替代方案来实现我的目标?谢谢!

1 个答案:

答案 0 :(得分:1)

如果您使用ListView.ItemSelectedListView.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;
            }
        }
    }
}