C# 需要具有排序和筛选功能的同一BindingList的多个视图-WPF

C# 需要具有排序和筛选功能的同一BindingList的多个视图-WPF,c#,wpf,binding,collections,C#,Wpf,Binding,Collections,我知道这与其他被问到的问题非常相似,我也研究过这些问题,但在某种程度上,这些解决方案并不适用于这个特定的场景 我在BindingList中有一组对象: private BindingList<PathologyModel> _patientPathologies; public BindingList<PathologyModel> PatientPathologies { get { return _patientPathologies; } } 这几乎奏效了。。。我

我知道这与其他被问到的问题非常相似,我也研究过这些问题,但在某种程度上,这些解决方案并不适用于这个特定的场景

我在BindingList中有一组对象:

private BindingList<PathologyModel> _patientPathologies;
public BindingList<PathologyModel> PatientPathologies { get { return _patientPathologies; } }
这几乎奏效了。。。我这样说几乎是因为视图显示了正确的数据,但最终的要求是我还需要跟踪CurrentItemChanged事件,以便根据用户所处的记录启用/禁用某些操作。这在AllPathologies视图中运行良好,但在TodaysPathologies中从未出现过,我猜是因为每次访问属性时它都会获得不同的集合源副本?奇怪的是,ListItem_Changed事件仍然可以针对原始集合源正常工作

我已尝试制作private CollectionViewSource对象来支持ICollectionView属性,正如我在其他文章中看到的,例如:

private CollectionViewSource _todaysPathologies;
public ICollectionView TodaysPathologies { get { return _todaysPathologies.View; } }

...
_todaysPathologies = new CollectionViewSource{Source= _patientPathologies}.View;
但由于源是BindingList,我无法应用筛选器谓词:

TodaysPathologies.CanFilter <--- false
所以现在我被卡住了。亲爱的StackOverflowers,我把我的命运交给你。

我需要知道用户何时编辑收藏中的特定项目,而其他类型的收藏似乎不支持这些项目

这并不完全正确。从INotifyPropertyChanged继承的类中使用的集合可以解决此问题

我建议在窗口页面中创建一个内部类。每个值都有一个属性,可编辑属性将调用NotifyPropertyChanged事件。然后您将拥有这些内部类对象的集合。内部类将表示网格中的一行

我以前解决这个问题的另一种方法是指定用户输入信息的文本列:

在XAML中:

<DataGridTextColumn //... Binding="{Binding Path=Value, Mode=TwoWay}">
    <DataGridTextColumn.EditingElementStyle>
         <Style TargetType="TextBox"/>
    </DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
内部类包含这个Value属性以及对我曾经拥有一个集合的类的对象的引用

现在我有了这个内部类的一个对象集合,它存储了这两个对象。我使用它来显示类的信息,并有一个额外的列来添加值。然后,我用旧类信息+这个值创建一个新对象


如果您觉得这有帮助,并希望我更详细地介绍,请告诉我。我非常乐意。或者有人会发布:P

我不认为我理解您通过将原始类的所有属性镜像到另一个类并尝试保持它们同步来解决的问题。我已经在收集的对象的所有属性上实现了INotifyPropertyChanged。好吧,BindingList是唯一一种在单个项目的PropertyChanged通知触发时会发出通知的WPF集合类型,例如,List和ObservableCollection等其他类型的集合仅在集合本身发生更改时发出通知。啊,我认为这有助于我更好地理解您的问题。现在,我需要知道用户何时编辑集合中的特定项。我假设您是通过强制转换所选项来获得类对象的。对于单个属性,是否需要知道新值用于验证目的?如果是这样,我知道解决方案。集合中的模型已正确验证和编辑,我的问题是从单个源集合创建多个排序和筛选视图。您的基础源是datatable还是dataview?@blindmeis它是bindinglist我想它与bindinglist不兼容。检查这个
TodaysPathologies.CanFilter <--- false
<DataGridTextColumn //... Binding="{Binding Path=Value, Mode=TwoWay}">
    <DataGridTextColumn.EditingElementStyle>
         <Style TargetType="TextBox"/>
    </DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
private string value;
public string Value
        {
            get
            { return value; }
            set
            {
                this.value = value;
                NotifyPropertyChanged("Value");
            }
        }