我与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?或者我需要做些什么来修理我的课程?
答案 0 :(得分:0)
我想把它作为一个评论,但它超出了字符限制。我会做对的。
嗯,这完全是关于时间的需要。
我强烈建议您不要使用
new ObservableCollection<object>(myList)
进行频繁投射,因为每次都会返回一个“{1}}”的新实例。
现在让我们假设您有一个memory
以及您要在用户界面上反映的List<T>
项目中的任何更改,那么您应该只为{{1}使用List<T>
并且不属于ObservableCollection
的任何List<T>
。
相反,如果您每次修改List
中的Class T
时都需要更新用户界面,我建议您将其设为collection
。
通常以最常见的方式,开发人员使用class T
将ObservableCollection
转换为ExtensionMethods
了解更多相关信息here
此外,他们使用List<T>
并将元素直接绑定到列表。
我的最终建议:根据您的需要使用可观察的集合,如上所述,但最重要的是,除非实际需要,否则不要在
ObservableCollection<T>
上运行。从您的服务中获取XAML Converters
到Lists
将其转换为data
,然后使用List
过滤来自它的数据。