Listview выбранный элемент в xamarin - PullRequest
0 голосов
/ 23 марта 2019

У меня есть просмотр списка, который заполняется списком терминов из ItemsSource.Свойство .Name - это текст, отображаемый в виде списка.Я пытаюсь сохранить свойство .Id int в переменной, чтобы я мог получить к нему доступ из другой формы.По сути, я хочу, чтобы, когда пользователь щелкает элемент в списке, он открывал форму и заполнял ее экземпляром списка, связанного с выбранным элементом.

Если представление списка заполнено Book1,Book2, Book3 и Book4 с идентификаторами 1, 2, 3 и 4, затем, если пользователь нажимает Book2, я хочу, чтобы для переменной SelectedBook было установлено свойство .Id, равное 2. Затем, когда откроется другая форма и эта форма будетизвлеките соответствующий экземпляр книги из базы данных sqlite и заполните поля информацией этой книги.

Я пытался сделать это с помощью свойства ItemSelected объекта ListView, но получаю эту ошибку "System.NullReferenceException: Objectссылка не установлена ​​на экземпляр объекта. ".

Вот код, который я использовал:

        public void OnSelectedItem(object sender, EventArgs args)
    {
        Book myBook = sender as Term;
        App.BookRep.SelectedBook = myBook.Id;
}

Изначально у меня был вид списка, заполненный кнопками (это мое предпочтение), носвойство SelectedItem в ListView, похоже, не использовалось, когда я это делал.Я попытался использовать свойство Clicked для Button, но не смог найти способ получения идентификатора для выбранной книги таким образом.Я делаю что-то неправильно или есть лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 25 марта 2019

У меня изначально был вид списка, заполненный кнопками (это мое предпочтение), но свойство SelectedItem в ListView, похоже, не использовалось, когда я делал это.

Есть два решения, чтобы получить то, что вы хотите:

Решение первое: Следует использовать SelectedItemChangedEventArgs, чтобы получить SelectedItem

public void OnSelectedItem(object sender, SelectedItemChangedEventArgs args)
{
    Book myBook = (Book)args.SelectedItem;
    App.BookRep.SelectedBook = myBook.Id;
}

Решение второе:

public void OnSelectedItem(object sender, EventArgs args)
{
    Book myBook = ((ListView)sender).SelectedItem as Book;
    App.BookRep.SelectedBook = myBook.Id;
}

Я попытался использовать свойство Clicked для Button, но не смог найти способ получения идентификатора для выбранной книги таким образом.

Решение третье:

Если для этого используется событие нажатия кнопки, добавьте кнопку в Xaml:

<Button Text="Click" HorizontalOptions="End" Clicked="OnClicked" />

OnClicked метод следующий:

void OnClicked(Object sender, MyEventArgs args)
{
   Button btn = sender as Button;
   Book myBook = btn.BindingContext as Book;
   App.BookRep.SelectedBook = myBook.Id;
}

System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.

Если произойдет эта ошибка, проверьте просмотр списка, если какие-то элементы не используются. Предположим, что удаление всех элементов управления из ListView, а затем проверка, что событие select может сработать. Если проблема не решена, вы можете показать код ListView.ItemTemplate Я проверю это.

0 голосов
/ 23 марта 2019

отправитель - это элемент управления, который вызвал событие, а не элемент данных

public void OnSelectedItem(object sender, EventArgs args)
{
    Book myBook = (Book)args.SelectedItem;
    App.BookRep.SelectedBook = myBook.Id;
}
...