【问题标题】:Xamarin Forms update listview after deletingXamarin Forms 删除后更新列表视图
【发布时间】:2016-06-09 08:32:26
【问题描述】:

我有一个列表视图,我想做的是当我点击一个项目时,会启动一个包含详细信息的新页面。 在这个页面上会有一个删除按钮,如果我按下它,元素就会从数据库中删除,页面是 popasync 回到列表。

然后我需要更新我的列表视图,目前我通过消息中心让它工作,但我不知道这是否是最好的解决方案。

这就是我启动详细信息页面的方式:

cardList.ItemTapped += async (sender, e) =>
{
    await Navigation.PushAsync(new CardDetails((Card) e.Item, database));     
};

这是带有删除代码的我的详细信息页面:

var toolbarItem = new ToolbarItem
{
    Name = "Supprimer",
    Command = new Command(this.deleteAndReturn),             
};

private void deleteAndReturn()
{
    database.deleteCard(card);
    Navigation.PopAsync();
    MessagingCenter.Send<CardDetails>(this, "Delete");
}

在我的 listPage 上,我像这样更新视图:

MessagingCenter.Subscribe<CardDetails>(this, "Delete", (sender) => {
    cardList.ItemsSource = database.getCards();
});

这是一个好方法吗?我已经让我们可以听像“popped”这样的事件,但我不知道如何听它。我认为 android 中的等价物是“OnActivityResult”。

【问题讨论】:

    标签: listview xamarin xamarin.forms


    【解决方案1】:

    因此,您可以使用 ObservableCollection 来实现此行为,而不是重新设置 ItemSource 或创建自定义渲染。

    只需将作为 ListView 的 ItemSource 的 IEnumarbale 设为 ObservableCollection。对此列表的任何更改都将直接传播到 ListView 本身。

    【讨论】:

      【解决方案2】:

      编辑或删除列表项后不会刷新,因此,在删除事件完成后,您应该再次从数据库中获取卡片并设置在列表视图上,如:

      cardList.ItemsSource = database.getCards();

      【讨论】:

      • 我已经这样做了,这令人耳目一新,我的问题是关于在 popasync 之后在页面上执行特定操作的最佳方式
      【解决方案3】:

      您需要为您的列表视图创建自定义渲染。 在这里,我写下了 xamarin 论坛链接,请关注它。 https://forums.xamarin.com/discussion/38472/refresh-listview-after-deleting-list-item 有多种选择,而且效果很好,我认为其中一种最适合您。

      【讨论】:

        猜你喜欢
        • 2016-12-06
        • 1970-01-01
        • 1970-01-01
        • 2019-08-28
        • 1970-01-01
        • 2019-01-17
        • 1970-01-01
        • 2022-07-07
        • 2017-08-08
        相关资源
        最近更新 更多