我有一个列表视图,其中填充了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的方法。我是做错了什么,还是有更好的方法去做?
答案 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;
}