集合与 ListCollectionView 索引
Collection vs ListCollectionView index
我有一个 ValueConverter,它构建了一个曾经有一个 observableCollection 的数据透视表
var employees = values[0] as ObservableCollection<Employee>;
在这个转换器中,我这样设置绑定:
foreach( var employee in employees) {
int indexer = periods.IndexOf( period );
var tb = new TextBlock( ) {
TextAlignment = TextAlignment.Center,
};
tb.SetBinding( TextBlock.TextProperty, new Binding( ) {
ElementName = "root",
Path = new PropertyPath( "EmployeesCol[" + indexer.ToString( ) + "]." + Extensions.GetPropertyName( ( ) => employee.Name ) )
} );
}
现在我的问题是绑定过去工作正常,路径如下所示:
EmployeesCol[1].Name
但我已经将 ObservableCollection 更改为 ListCollectionView
所以这个:
var employees = values[0] as ObservableCollection<Employee>;
变成了这个:
var employees( (ListCollectionView) values[0] ).Cast<Employee>( ).ToList( );
现在这不再有效了:
EmployeesCol[1].Name
您不能像这样在 ListCollectionView 上使用索引(索引器),但是我怎样才能在 ListCollectionView 上使用索引器绑定到正确的项目?
ListCollectionView
provide a method object GetItemAt(Int32)
对集合进行索引。
只是一个基于评论的伪代码供您理解(当然需要进行空引用检查等!!):
var result = (EmployeesCol.GetItemAt(1) as Employee).Name;
SourceCollection
属性 的 ListCollectionView
class returns 一个 IEnumerable
你可以调用 ElementAt
方法或从以下位置创建列表:
var employees = theListCollectionView.SourceCollection.OfType<Employee>().ToList();
var employee = employees[0];
...
var employees = theListCollectionView.SourceCollection.OfType<Employee>();
var employee = employee.ElementAt(0);
您还可以将 SourceCollection
转换为源集合的任何类型,例如列表:
var employees = theListCollectionView.SourceCollection as IList<Employee>;
我有一个 ValueConverter,它构建了一个曾经有一个 observableCollection 的数据透视表
var employees = values[0] as ObservableCollection<Employee>;
在这个转换器中,我这样设置绑定:
foreach( var employee in employees) {
int indexer = periods.IndexOf( period );
var tb = new TextBlock( ) {
TextAlignment = TextAlignment.Center,
};
tb.SetBinding( TextBlock.TextProperty, new Binding( ) {
ElementName = "root",
Path = new PropertyPath( "EmployeesCol[" + indexer.ToString( ) + "]." + Extensions.GetPropertyName( ( ) => employee.Name ) )
} );
}
现在我的问题是绑定过去工作正常,路径如下所示:
EmployeesCol[1].Name
但我已经将 ObservableCollection 更改为 ListCollectionView 所以这个:
var employees = values[0] as ObservableCollection<Employee>;
变成了这个:
var employees( (ListCollectionView) values[0] ).Cast<Employee>( ).ToList( );
现在这不再有效了:
EmployeesCol[1].Name
您不能像这样在 ListCollectionView 上使用索引(索引器),但是我怎样才能在 ListCollectionView 上使用索引器绑定到正确的项目?
ListCollectionView
provide a method object GetItemAt(Int32)
对集合进行索引。
只是一个基于评论的伪代码供您理解(当然需要进行空引用检查等!!):
var result = (EmployeesCol.GetItemAt(1) as Employee).Name;
SourceCollection
属性 的 ListCollectionView
class returns 一个 IEnumerable
你可以调用 ElementAt
方法或从以下位置创建列表:
var employees = theListCollectionView.SourceCollection.OfType<Employee>().ToList();
var employee = employees[0];
...
var employees = theListCollectionView.SourceCollection.OfType<Employee>();
var employee = employee.ElementAt(0);
您还可以将 SourceCollection
转换为源集合的任何类型,例如列表:
var employees = theListCollectionView.SourceCollection as IList<Employee>;