XAML-код выглядит так:
<ListView x:Name="eventsView" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2"
MouseDoubleClick="eventsView_MouseDoubleClick" >
...
<GridViewColumn Width="Auto" Header="Level" DisplayMemberBinding="{Binding Level }"/>
Как видно из кода, данные в список заносились не напрямую, а через привязку данных, поэтому когда я попытался очистить ListView с помощью кода:
eventsView.Items.Clear();
Получил исключение InvalidOperationException «Operation is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead«.
Поэтому для того, чтобы очистить ListView в этом случае нужно было очищать список, к которому этот ListView был привязан:
eventList.Clear();
Привязка осуществлялась в коде следующим образом:
Dispatcher.BeginInvoke(DispatcherPriority.Background, (SendOrPostCallback)delegate {
this.eventsView.SetValue(ListView.ItemsSourceProperty, eventList);
}, null);
При этом возникает проблема обновления интерфейса. Для того, чтобы ListView узнал о том, что мы обновили список, нужно использовать не List<>, а ObservableCollection<EventRecord> eventList { get; set; }
А элементы списка добавлялись с помощью следующего кода:
Application.Current.Dispatcher.Invoke((Action)delegate
{
eventList.Add(eventdetail);
});
- Android: Захват траффика - 07.09.2024
- WPF: Отобразить дату и время в формате региональных настроек - 30.08.2024
- Яндекс-диск: Сортировка фото по дате - 23.07.2024