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

Cra*_*aig 6 c# data-binding indexing wpf xaml

我有一个绑定的形式:

Path=SpecialCollection[0]
Run Code Online (Sandbox Code Playgroud)

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

public T this[string propertyValue]
{
    get
    {
        // do stuff
        return default(T);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

H.B*_*.B. 14

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

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

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

<!-- Does not work -->
<TextBlock Text="{Binding [(sys:Int32)0]}"/>
<!-- Does work -->
<TextBlock Text="{Binding Path=[(sys:Int32)0]}"/>
Run Code Online (Sandbox Code Playgroud)