ListView не обновляет свое содержимое после удаления элемента - PullRequest
0 голосов
/ 26 октября 2019

Я работаю над Xamarin.Forms в C #. Мой ListView способен отображать данные из базы данных. Я также добавил MenuItem с обработчиком события клика в коде позади. Когда я удерживаю, чтобы удалить ( Android ) элемент, MenuItem_Clicked вызывается и _students обновляется (мой выбранный элемент был удален), но мой ListView по-прежнему не обновляется.

Мой вид:

<ListView x:Name="listStudents" Refreshing="listStudents_Refreshing" 
          IsPullToRefreshEnabled="True">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <ViewCell.ContextActions>
                    <MenuItem Text="Delete" Clicked="MenuItem_Clicked" CommandParameter="{Binding .}" />
                </ViewCell.ContextActions>
                <StackLayout Padding="20">
                    <Label Text="{Binding Name}" />
                </StackLayout>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

Код:

private ObservableCollection<Student> _students;

public ListView_SearchBar()
{
    InitializeComponent();
    var _students = SQLite_DB.SeedStudentData();
    _students = new ObservableCollection<Student>(_students);
    listStudents.ItemsSource = _students;
}

private void MenuItem_Clicked(object sender, EventArgs e)
{
    listStudents.IsRefreshing = true;
    _students.Remove((sender as MenuItem).CommandParameter as Student);
    listStudents.ItemsSource = null;
    listStudents.ItemsSource = _students;
    listStudents.IsRefreshing = false;
    return;
}

1 Ответ

1 голос
/ 27 октября 2019

Если я изменю ваш код следующим образом, ListView будет корректно обновляться на моей стороне:

private ObservableCollection<Student> _students;

public ListView_SearchBar()
{
    InitializeComponent();
    _students = SQLite_DB.SeedStudentData();
    _students = new ObservableCollection<Student>(_students);
    listStudents.ItemsSource = _students;
}

private void MenuItem_Clicked(object sender, EventArgs e)
{
    listStudents.IsRefreshing = true;
    _students.Remove((sender as MenuItem).CommandParameter as Student);
    listStudents.ItemsSource = null;
    listStudents.ItemsSource = _students;
    listStudents.IsRefreshing = false;
    return;
}

Обратите внимание, что я удалил подпись var вашего первого использования _student в конструкторе вашей страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...