Listview在xamarin中选择编辑项

Listview在xamarin中选择编辑项,listview,xamarin.forms,selecteditem,Listview,Xamarin.forms,Selecteditem,我有一个列表视图,其中填充了ItemsSource中的术语列表。.Name属性是listview上显示的文本。我试图将.Id int属性保存到一个变量中,以便可以从另一个窗体访问它。基本上,我需要它,以便当用户单击列表中的某个项目时,它将打开一个表单,并使用与该项目关联的列表实例填充该表单 如果listview由Id为1、2、3和4的Book1、Book2、Book3和Book4填充,那么如果用户点击Book2,我希望SelectedBook变量设置为.Id属性2。然后,当打开另一个表单时,该表

我有一个列表视图,其中填充了ItemsSource中的术语列表。.Name属性是listview上显示的文本。我试图将.Id int属性保存到一个变量中,以便可以从另一个窗体访问它。基本上,我需要它,以便当用户单击列表中的某个项目时,它将打开一个表单,并使用与该项目关联的列表实例填充该表单

如果listview由Id为1、2、3和4的Book1、Book2、Book3和Book4填充,那么如果用户点击Book2,我希望SelectedBook变量设置为.Id属性2。然后,当打开另一个表单时,该表单将从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属性似乎没有被使用。我尝试使用按钮的Clicked属性,但找不到通过这种方式获取所选书籍Id的方法。我是否做得不正确,或者是否有更好的方法来执行此操作?

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

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

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

public void OnSelectedItem(object sender, EventArgs args)
{
    Book myBook = (Book)args.SelectedItem;
    App.BookRep.SelectedBook = myBook.Id;
}
我最初用按钮填充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;
}
我尝试使用按钮的Clicked属性,但找不到通过这种方式获取所选书籍Id的方法

解决方案三:

public void OnSelectedItem(object sender, EventArgs args)
{
    Book myBook = ((ListView)sender).SelectedItem as Book;
    App.BookRep.SelectedBook = myBook.Id;
}
如果使用按钮单击事件进行操作,请在Xaml中添加按钮:

<Button Text="Click" HorizontalOptions="End" Clicked="OnClicked" />
System.NullReferenceException:对象引用未设置为对象的实例

如果发生此错误,请检查listview是否有未使用的某些元素。建议从listview中删除所有控件,然后检查select事件是否有效。如果未解决此问题,则可以显示listview.ItemTemplate的代码,我将进行检查

我最初用按钮填充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;
}
我尝试使用按钮的Clicked属性,但找不到通过这种方式获取所选书籍Id的方法

解决方案三:

public void OnSelectedItem(object sender, EventArgs args)
{
    Book myBook = ((ListView)sender).SelectedItem as Book;
    App.BookRep.SelectedBook = myBook.Id;
}
如果使用按钮单击事件进行操作,请在Xaml中添加按钮:

<Button Text="Click" HorizontalOptions="End" Clicked="OnClicked" />
System.NullReferenceException:对象引用未设置为对象的实例


如果发生此错误,请检查listview是否有未使用的某些元素。建议从listview中删除所有控件,然后检查select事件是否有效。如果未解决此问题,则可以显示listview.ItemTemplate的代码,我将对此进行检查。

您可以从EventArgs属性中获取所选项目,然后将其强制转换到您的模型手册中,并从中获取ID属性。为了澄清这一点,您可以从args参数中获取SelectedItem。将其转换为书本模型将为您提供所选viewcell的绑定。@SparshaBhattarai感谢您的回复!我一直在尝试实现这一点的不同组合,但未能实现它。如何将参数转换为图书模型?只需使用sender,而不是selecteditem进行转换。var curItem=args.SelectedItem作为Book;然后对其余部分使用curItem.ID属性。您可以从EventArgs属性中获取所选项目,然后将其强制转换到您的模型书中,并从中获取ID属性。要澄清,您可以从args参数中获取SelectedItem。将其转换为书本模型将为您提供所选viewcell的绑定。@SparshaBhattarai感谢您的回复!我一直在尝试实现这一点的不同组合,但未能实现它。如何将参数转换为图书模型?只需使用sender,而不是selecteditem进行转换。var curItem=args.SelectedItem作为Book;然后对其余部分使用curItem.ID属性。