我有一个列表视图,我想要做的是当我点击一个项目时,会启动一个包含详细信息的新页面。 在这个页面上会有一个删除按钮,如果我按下它,该元素将从数据库中删除,并且页面是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();
});
这是一个好方法吗?我已经这样,我们可以听取像#&#34; popped&#34;但我不知道该怎么听。我认为android中的等价物将是&#34; OnActivityResult&#34;。
答案 0 :(得分:3)
因此,不是重新设置ItemSource或创建自定义渲染,而是可以使用ObservableCollection来实现此行为。
只需将您的ListView的ItemSource作为ObservableCollection的IEnumarbale。对此列表的任何更改都将直接传播到ListView本身。
答案 1 :(得分:0)
在编辑或删除列表项后没有刷新,因此,在删除事件完成之后,您应该再从数据库获取卡并在列表视图上设置如下:
cardList.ItemsSource = database.getCards();
答案 2 :(得分:0)
您需要为列表视图创建自定义呈现。 在这里,我已经写下了xamarin论坛链接,请关注它。 https://forums.xamarin.com/discussion/38472/refresh-listview-after-deleting-list-item 有多个选项,它正在运作我认为其中一个最适合你。