【问题标题】:Why is my listView not updating after changing itemsource?为什么更改 itemsource 后我的 listView 没有更新?
【发布时间】:2019-11-29 21:15:58
【问题描述】:

我有一个从 HashSet 接收信息的列表视图,但是当我删除 HashSet 的一项时,我的列表视图没有更新。

而且我的列表视图没有刷新方法,不知道为什么。这是我的代码:

private void deleteActivityFromAlumn(String activityName, String nif)
{
    Alumn alumnDelete = Alumn.findAlumnByNIF(nif);
    Activity activityDelete = Activity.getActivityByName(activityName);
    Debug.WriteLine(alumnDelete.Name + activityDelete.Name);
    alumnDelete.activities.Remove(activityDelete);
    activityDelete.Alumns.Remove(alumnDelete);
    listActivities.ItemsSource = alumnDelete.activities;
}

并且该项目以正确的方式被删除,因为如果我再次搜索该对象,它将从 listView 中删除,但我相信它应该在您刷新 ItemsSource 时更新。

【问题讨论】:

  • listActivities.Refresh(); 不适合你吗?

标签: c#


【解决方案1】:

要确保绑定项目的控件在这些项目更改时发生更改,您必须这样做

  1. 要么使该集合实现INotifyCollectionChanged。最简单的方法是使用ObservableCollection<T> 而不是HashSet<T>
    • 尽管您将失去HashSet<T> 为您提供的唯一性属性。
  2. 或者在您更改集合时以某种方式强制刷新该控件。尽管必须考虑到它不是最佳解决方案,因为它往往会导致控件的完全重绘,并出现明显的性能和/或显示问题
    • 通过调用Refresh方法(WPFWinForms
    • 或者通过重新绑定集合
listActivities.ItemsSource = null; 
listActivities.ItemsSource = alumnDelete.activities

【讨论】:

    猜你喜欢
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2018-03-21
    相关资源
    最近更新 更多