WPF绑定如何区分索引器属性和列表元素?

我有一个绑定的forms:

Path=SpecialCollection[0] 

SpecialCollection类扩展了ObservableCollection并具有索引器属性。

 public T this[string propertyValue] { get { // do stuff return default(T); } } 

我的问题是绑定尝试获取索引器属性值,而不是返回集合中的第0项。 有没有办法强制绑定将0视为一个整数,所以它返回一个集合元素,而不是调用集合的索引器属性的getter?

根据MSDN,您可以告诉绑定输入的值的类型作为索引:

在索引器内部,您可以使用逗号(,)分隔多个索引器参数。 可以使用括号指定每个参数的类型。 例如,您可以使用Path =“[(sys:Int32)42,(sys:Int32)24]”,其中sys映射到System名称空间。

我注意到采用路径字符串的Binding构造函数使用另一个PropertyPath构造函数而不是默认的PropertyPath类型转换器,所以PropertyPath构造函数在这种情况下不起作用。 要避免此问题,请通过手动设置Path属性来避免Binding构造函数,该属性通过类型转换器调用转换。

     

实际上,您有两个索引器属性,一个采用int参数,另一个采用string参数。 坦率地说,我不知道绑定表达式如何选择在不明确时使用哪个索引器。 如果只有一个,那么它可以将索引强制转换为索引器参数的类型。 如果有两个,它可以抛出exception或根据启发式选择一个。 在这种情况下,它显然选择了错误的一个。

要解决这个问题,您可以将字符串索引器“向下移动”以使其挂起新属性,这样它就不会与列表索引器竞争,或者如果您需要的只是List[0] ,则可以添加First财产和绕过索引器。