2016-06-09 2 views
0

У меня есть список и что я хочу сделать, когда я нажимаю на элемент, новая страница запускается с подробностями. На этой странице появится кнопка удаления, и если я нажму на нее, элемент будет удален из базы данных, а на странице будет popasync, чтобы вернуться к списку.Xamarin Forms update listview после удаления

Затем мне нужно обновить свой список, в настоящее время я сделал его работу благодаря messagingcenter, но я не знаю, является ли это лучшим решением.

Это, как я запускаю мой detailspage:

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».

ответ

0

это не обновить после редактирования или удаления элемента списка так, после Удалить событие завершения затем снова вы должны получить карту из базы данных и установить на список ракурсе, как:

cardList.ItemsSource = database.getCards() ;

+0

Я уже делаю это, и это освежает, мой вопрос касался наилучшего способа выполнения определенного действия на странице после popasync – Spierki

0

Вам необходимо создать персонализированный рендер для просмотра списка. здесь я записываю ссылки форума xamarin, пожалуйста, следуйте им. https://forums.xamarin.com/discussion/38472/refresh-listview-after-deleting-list-item есть несколько вариантов, и он работает, я думаю, что один из них лучше для вас.

3

Поэтому вместо повторной установки ItemSource или создания настраиваемого рендера вы можете использовать ObservableCollection для этого поведения.

Просто введите IEnumarbale, который является ItemSource вашего ListView в ObservableCollection. Любые изменения в этом списке будут непосредственно переданы самому элементу ListView.

Смежные вопросы