WPF datagrid过滤数据绑定List <t>中的列表<t> C#

时间:2018-04-06 17:17:26

标签: c# wpf filter binding datagrid

我与DataGrid绑定List<T>。以下是我的课。 List<FSCLevel>绑定到我的主RowDetails中的DataGrid。我添加了一个过滤器控件,供用户过滤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<T1>内处理List<T>的最佳方式是什么?假设我使用以下内容将我的列表转换为ObservableCollection<T>

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

List<FSCLevel>里面会发生什么?或者如何将CUSTCARDLevel中的List<FSCLevel>转换为ObservableCollection?或者我需要做些什么来修理我的课程?

1 个答案:

答案 0 :(得分:0)

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

嗯,这完全是关于时间的需要。

  

我强烈建议您不要使用new ObservableCollection<object>(myList)进行频繁投射,因为每次都会返回一个“{1}}”的新实例。

现在让我们假设您有一个memory以及您要在用户界面上反映的List<T>项目中的任何更改,那么您应该只为{{1}使用List<T>并且不属于ObservableCollection的任何List<T>

相反,如果您每次修改List中的Class T时都需要更新用户界面,我建议您将其设为collection

通常以最常见的方式,开发人员使用class TObservableCollection转换为ExtensionMethods了解更多相关信息here

此外,他们使用List<T>并将元素直接绑定到列表。

  

我的最终建议:根据您的需要使用可观察的集合,如上所述,但最重要的是,除非实际需要,否则不要在ObservableCollection<T>上运行。从您的服务中获取XAML ConvertersLists将其转换为data,然后使用List过滤来自它的数据。