Xamarin中的Listview selecteditem

时间:2019-03-23 11:34:05

标签: listview xamarin.forms selecteditem

我有一个列表视图,其中填充了ItemsSource中的术语列表。 .Name属性是列表视图上显示的文本。我试图将.Id int属性保存到变量,以便可以从另一种形式访问它。本质上,我希望这样做,以便当用户单击列表上的项目时,它将打开一个表单,并使用与所点击的项目相关联的列表实例填充该表单。

如果列表视图使用ID为1、2、3和4的Book1,Book2,Book3和Book4填充,则如果用户点击Book2,我希望将SelectedBook变量设置为2的.Id属性。然后,当另一张表单将被打开时,该表单将从sqlite数据库中提取相应的书籍实例,并使用该书籍的信息填充字段。

我一直试图使用ListView的ItemSelected属性来执行此操作,但是却收到此错误“ System.NullReferenceException:对象引用未设置为对象的实例。”。

这是我使用的代码:

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

我最初是用按钮填充listview的(这是我的偏爱),但是当我这样做时,似乎并未利用ListView的SelectedItem属性。我尝试使用Button的Clicked属性,但是找不到以这种方式获取所选书的ID的方法。我是做错了什么,还是有更好的方法去做?

2 个答案:

答案 0 :(得分:1)

  

我本来是用按钮填充listview的(这是我的偏爱),但是当我这样做时,似乎没有利用ListView的SelectedItem属性。

有两种解决方案来获得您想要的东西:

解决方案一:应使用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;
}
  

我尝试使用Button的Clicked属性,但是找不到以这种方式获取所选书的ID的方法。

解决方案三:

如果使用Button click事件来执行操作,请在Xaml中添加Button:

<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是否未使用某些元素。建议从ListView中删除所有控件,然后检查select事件是否可以工作。如果未解决,则可以显示 ListView.ItemTemplate strong>,我会检查的。

答案 1 :(得分:0)

发件人是触发事件的控件,而不是数据项

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