WPF 数据网格筛选器数据绑定 列表<T1> <T> C# 中的列表



我有一个DataGrid绑定到List<T>。 下面是我的课程。List<FSCLevel>与我的主要DataGrid中的RowDetails绑定。 我添加了一个过滤器控件供用户过滤CUSTOMER_CODE

public class CUSTCARDLevel: INotifyPropertyChanged
{
#region Members        
private string _cUSTOMER_CODE;            
private List<FSCLevel> _fSClist;        
#endregion
#region Properties       
public string CUSTOMER_CODE { get { return _cUSTOMER_CODE; } set { _cUSTOMER_CODE = value; OnPropertyChanged("CUSTOMER_CODE"); } }      
public List<FSCLevel> FSCLIST   { get { return _fSClist; } set {_fSClist = value;    OnPropertyChanged("FSCLIST"); } }
#endregion
// INotifyPropertyChanged interface
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName) 
{
if (PropertyChanged != null)
{ PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}

我现在需要在列表中应用一些过滤器,例如,DataGrid它只显示CUSTOMER_CODE是"CUST1"。

所以问题来了,我必须使用ObservableCollection来过滤吗? 有没有办法让我只使用带有INotifyPropertyChanged接口的类? 如果是这样,在List<T>内处理List<T1>的最佳方法是什么? 假设我使用以下方法将列表转换为ObservableCollection<T>

ObservableCollection<CUSTCARDLevel> myObserveList = new ObservableCollection<CUSTCARDLevel>(myList);

里面的List<FSCLevel>会怎样? 或者如何将CUSTCARDLevel中的List<FSCLevel>投射到ObservableCollection中? 或者我需要做点什么来修复我的课程?

我想把它作为一个评论,但它超出了字符限制。我会直接说的。

好吧,这一切都与时间的需要有关。

我强烈建议不要频繁地使用new ObservableCollection<object>(myList)进行转换,因为它每次都会返回一个占用memory的新实例。

现在,假设您有一个List<T>,并且您想要反映在UI上的List<T>项的任何更改,那么您应该只对List<T>使用ObservableCollection,而不是对属于Class T的任何List使用。

相反,如果您的UI每次修改class T中的collection时都需要更新,我建议您将其设为ObservableCollection

通常,在最常见的方式中,开发人员使用ExtensionMethodsList<T>转换为ObservableCollection<T>在此处阅读更多相关信息

此外,它们使用XAML Converters并将元素直接绑定到列表。

我的最后一个建议:如上所述,根据您的需求使用可观察的集合,但最重要的是,除非实际需要,否则不要对Lists进行操作。将服务中的data提取到List将其转换为ObservableCollection一次,然后使用System.LINQ从中筛选数据。

最新更新