【问题标题】:Listview selecteditem in xamarinxamarin中的列表视图选定项
【发布时间】:2019-08-14 05:57:23
【问题描述】:

我有一个列表视图,其中填充了来自 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 的 SelectedItem 属性。我尝试使用 Button 的 Clicked 属性,但找不到以这种方式获取所选书籍的 Id 的方法。我做错了什么还是有更好的方法来做这件事?

【问题讨论】:

  • 您可以从 EventArgs 属性中获取所选项目,然后您可以将其投射到模型 Book 并从那里获取 ID 属性。
  • 为了澄清,您可以从 args 参数中获取 SelectedItem。将其转换为 Book 模型应该会为您提供所选视单元的绑定。
  • @SparshaBhattarai 感谢您的回复!我一直在尝试实现此功能的不同组合,但未能成功。您将如何将 args 转换为 book 模型?
  • 只需使用您对发件人完成的演员阵容,而不是使用选定的项目。 var curItem = args.SelectedItem as Book;然后将 curItem.ID 属性用于其余部分。

标签: listview xamarin.forms selecteditem


【解决方案1】:

我最初在列表视图中填充了按钮(这是我的偏好),但是当我这样做时似乎没有使用 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点击事件来做,在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的代码,我会检查的。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多