【发布时间】:2017-09-07 07:54:04
【问题描述】:
我有一个 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上的GetItemAt(Int32)方法吗? -
这对绑定不起作用?因为它实际上是一个字符串,所以我会得到错误:BindingExpression path error: '[]' property not found on 'object' ''ListCollectionView' (HashCode=13293450)'。 BindingExpression:Path=EmployeeCol.GetIndex(1).Name
-
从你得到的异常中问题很明显,不是吗?!
GetItemAt(Int32)的返回值是System.Object类型,您需要将其类型转换为预期类型。例如:Employee在您的情况下。
标签: c# wpf listcollectionview