В настоящее время я изучаю Xamarin и нахожусь на стадии изучения ListView. Я заметил, что если я связываю ListView со списком и удаляю из него элемент, то просмотр списка не будет отображать это изменение. Я понял, что мне нужно использовать ObservableCollection, чтобы он работал автоматически (или иметь коллекцию, реализующую надлежащий интерфейс), но я просто хотел бы понять, почему это не работает, даже когда я сбрасываю свойство ItemsSource ListView после удаления. Вот код:
namespace Lists
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class ListsOne : ContentPage
{
List<Contact> _contacts = new List<Contact> {
new Contact{ Name = "Mosh", Number = "1234566", ImageUrl="http://lorempixel.com/100/100/people/1"},
new Contact { Name = "Josh", Number = "1236578" , ImageUrl = "http://lorempixel.com/100/100/people/2"}};
IEnumerable<Contact> GetContacts(string searchText = null)
{
if (String.IsNullOrWhiteSpace(searchText))
{
return _contacts;
}
return _contacts.Where(c => c.Name.StartsWith(searchText));
}
public ListsOne()
{
InitializeComponent();
listView.ItemsSource = GetContacts();
}
private void Delete_Clicked(object sender, EventArgs e)
{
Contact contact = (sender as MenuItem).CommandParameter as Contact;
_contacts.Remove(contact);
listView.ItemsSource = GetContacts();
}
private void SearchBar_TextChanged(object sender, TextChangedEventArgs e)
{
listView.ItemsSource = GetContacts(e.NewTextValue);
}
}
}
Как вы можете видеть в методе Delete_Clicked, после удаления контакта из _contacts я сбрасываю ItemsSource, но это не повлияет на приложение, даже при том, что реализация практически такая же. для SearchBar_TextChanged работает (если я правильно помню, я сейчас на работе). Любое понимание того, как это работает? Извините, если это глупо, но я только учусь.