【问题标题】:C# WPF ListView doesnt update Items from ObservableCollection when removedC# WPF ListView 在删除时不会从 ObservableCollection 更新项目
【发布时间】:2017-07-31 18:44:08
【问题描述】:

试图将selectable 的项目从ListView 中删除,其中ItemsSourcebindedObservableCollectionDebugging 表明项目被正确标记为选中并删除了列表本身。但是显示的ListView 不会更新更改,因此删除的项目保持shown

查看

<ListView BorderThickness       = "0"
                          AlternationCount      = "2"
                          BorderBrush           = "Transparent"
                          ItemsSource           = "{Binding TestEntries}"
                          Style                 = "{StaticResource ListViewStyle}"
                          ItemContainerStyle    = "{StaticResource ListViewItemStyle}"
                          ScrollViewer.HorizontalScrollBarVisibility="Hidden">

可观察的集合

public ObservableCollection<Entry> TestEntries
{
    get => new ObservableCollection<Entry>(_testEntries
           .Where(x => x.Title.ToUpper().Contains(FilterText.ToUpper()))
           .OrderByDescending(x => x.Date));
    set
    {
        _testEntries = value;
        OnPropertyChanged();
    }
}

命令(删除项目)

private void ButtonDeleteCommandExecute()
{
    var toDeleteEntries = TestEntries.Where(x => x.IsSelected);
    toDeleteEntries.ToList().ForEach((obj) =>
    {
        TestEntries.Remove(obj as Entry);
    });
}

希望有人能指出正确的方向

【问题讨论】:

  • 你总是从get返回新的ObservableCollection,所以当你尝试删除项目时,它会从新的ObservableCollection中删除,当然,发送CollectionChanged但是你的ListView检索实例ObservableCollection 仅在它被初始化时一次,并且它不知道新集合的CollectionChanged
  • 这很有意义,感谢您的解释。更改吸气剂后,它就像一个魅力。非常感谢:)。

标签: c# wpf listview observablecollection


【解决方案1】:

试试这个:

getter 中返回与ObservableCollection 相同的对象,以便notify 您的Target 可以按照@George Alexandria 的建议进行自我更新。

public ObservableCollection<Communication> TestEntries
{
   get
   {
      return _testEntries;                  
   }
   set
   {
      _testEntries = value;
      //OnPropertyChanged(); <-- of no use
    }
 }

既然你想filter数据在你listView

TestEntries = new ObservableCollection<Communication>(_testEntries.Where(x=>x.Title.ToUpper().Contains(FilterText.ToUpper())).OrderByDescending(x=>x.Date).ToList());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-15
    • 2014-01-15
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多