c# - 集合中项目的可观察集合属性发生了变化

标签 c# wpf sorting collections observablecollection

我有一个 ObservableCollection<T> .我已将它绑定(bind)到 ListBox 控件并添加了 SortDescriptions到 ListBox 上的 Items 集合,使列表按我想要的方式排序。

当子元素上的任何属性发生更改时,我想在任何 点对列表求助。

我所有的子元素都实现了 INotifyPropertyChanged .

最佳答案

蛮力:

  1. 将处理程序附加到每个子项的每个 PropertyChanged 事件
  2. 从 CollectionViewSource 中获取 ListCollectionView
  3. 调用 Refresh。

编辑:

1、2 的代码将存在于您的代码隐藏中。

对于#1,你会做类似的事情:

private void Source_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    switch (e.Action)
    {
        case NotifyCollectionChangedAction.Add:
            foreach( SomeItem item in e.NewItems)
            {
               item.PropertyChanged += new PropertyChangedEventHandler(_SomeItem_PropertyChanged); 
            }
            break;
....
**HANDLE OTHER CASES HERE**
....
      }
}

对于 #2,在您的 CollectionChanged 处理程序中,您可以执行如下操作:

private void _SomeItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    ListCollectionView lcv = (ListCollectionView)(CollectionViewSource.GetDefaultView(theListBox.ItemsSource));
    lcv.Refresh();
}

编辑2: 但是,在这种情况下,我会强烈建议您也检查 ListCollectionView.NeedsRefresh 并仅在已设置时刷新。如果您的属性已更改但不影响排序,则没有理由重新排序。

关于c# - 集合中项目的可观察集合属性发生了变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1015126/

相关文章:

wpf - 从 FlowDocumentReader 中删除工具栏

c - 加载 MFC View 时,调试断言在\$InstallDir\VC\atlmfc\src\mfc\appgui3.cpp 第 385 行失败

c# - 加载作为我的解决方案一部分的 FlowDocument.xaml

git - 相当于 PowerShell 中的 bash 排序

c - 使用函数对动态数组进行冒泡排序

c# - 我需要一些关于 mysql 的建议

c# - 如何在 C# 中将包含逗号的值写入 CSV 文件?

c# - TPL 数据流 : Persist previous data

c# - Console.Write可删除字符

python - Numpy:通过另一个数组的唯一性在一个数组中查找对应关系,任意长度