Как найти долго нажатый выбранный элемент из списка для события длинного нажатия, используя MR.Gestures в форме Xamarin
Я использую MR.Gestures для длинного события нажатия на вид списка. Я могу вызвать событие длительного нажатия, но не могу получить просмотр списка, выбранный элемент длительного нажатия.
<mr:ListView x:Name="listView"
ItemsSource="{Binding downloadedLessonsData}"
LongPressedCommand="{Binding LongPressedCommand}"
LongPressingCommandParameter="{Binding SelectedItem}"
>
В коде модели представления метод OnLongPressed запускается при длительном нажатии элемента списка:
protected virtual void OnLongPressed(LongPressEventArgs e)
{
MR.Gestures.ListView list= (MR.Gestures.ListView) (e.Sender);
//list.LongPressedCommandParameter; LongPressedCommandParameter is
//comming null, unable to get selectedItem
Debug.WriteLine("OnLongPress");
}
Но я не могу получить выделенный долго нажатый элемент в методе OnLongPressed. Подскажите, пожалуйста, как получить выделенный элемент длинного нажатия в методе OnLongPressed. Я новичок в формах ксамарин. Заранее спасибо.
3 ответа
Ваш кастинг для выбранного предмета MR.Gestures.ListView list=(MR.Gestures.ListView) (e.Sender);
неправильно. Вы должны привести его к модели, если каждый выбранный предмет является коллекцией.
protected virtual void OnLongPressed(LongPressEventArgs e)
{
var selectedItem=(Model name be be given)e.Sender;
' //now you will get the selected model in selectedItem'
}
Вы должны привести его к типу данных, если каждый выбранный элемент является одним значением (например, строка).
protected virtual void OnLongPressed(LongPressEventArgs e)
{
var selectedItem=(string)e.Sender;
' //now you will get the selected string in selectedItem'
}
Вместо этого попробуйте https://github.com/pateljay0323/XamarinFormsGestures
найти SingleTap, DoubleTap, LongPress, Swipe, Pinch, Move, Up, Down и т. д.
а также это сэкономит ваши лицензионные сборы
Вы можете использовать listView.SelectedItem
(так как выбранный пункт будет установлен при прикосновении к ячейке) или вы обрабатываете LongPress
на каждой Cell
, Тогда вы получите пресс Cell
в sender
,
В вашем коде подпись OnLongPressed
метод неправильный, но если он выполняется, то это просто ошибка копирования и вставки.