2016-08-17 7 views
1

У меня есть вид списка, который я появляюсь в формах Xamarin, которые я хочу скрыть, если кто-то ударяет за пределы поля. У меня есть признак распознавания жестов на родительском макете для представления списка, которое обрабатывает это. В Android все работает хорошо. Если я щелкнул, он закрывается, но если я нажму на элемент в виде списка, он правильно его выберет. В iOS происходит обратное. Обработчик жестов на макете запускается первым и закрывает представление списка без правильного выбора элемента.Заказ обработчика событий в Xamarin

Итак, мой вопрос, есть ли способ изменить порядок того, как происходит увольнение? Если нет, есть ли лучшая альтернатива тому, как я пытаюсь это сделать? Благодаря!

ответ

1

Если вы используете ListView.ItemSelected или ListView.ItemTapped, тогда я столкнулся с тем же вопросом на днях. Исправить для меня было не использовать ни один из них, и вместо этого приложить TapGestureRecognizer к ViewCell, который находится в пределах ListView. Я также добавил свойство IsSelected объекту, с которым привязан ViewCell, чтобы я мог изменить цвет фона элемента после его нажатия.

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; 
      } 
     } 
    } 
} 
+0

Итак, обновление этого решения действительно сработало, однако мне пришлось установить cell.View, прежде чем я смог добавить в GestureRecognizer. Поэтому мне просто нужно было сделать что-то вроде cell.View = new ContentView { Content = label, Padding = new Толщина (10, 0) }; прежде чем я смог добавить распознаватель жестов. – Arthurdent510

Смежные вопросы