绑定到.NET中的多个索引属性?

时间:2013-02-01 08:44:48

标签: .net wpf xaml data-binding binding

绑定到此属性非常简单:

public Foo MyFoo {get; set;}

public class Foo
{
    public object this[object key]
}

因为在XAML中您可以这样做:

<Label Content="{Binding MyFoo["key"]}"/>

但是,如果我有第二个索引属性怎么办?

我知道这在C#中不可能直接实现,但在VB.NET中它是。

Default Public Property Item(key As Object) As Object 'equivalent to this[...]'
Public Property Item2(key As Object) As Object 'a second indexed property!'

这些是我尝试过的一些绑定:

<Label Content="{Binding MyFoo["key"]}"/>
<Label Content="{Binding MyFoo.Item["key"]}"/>
<Label Content="{Binding MyFoo.Item2["key"]}"/>

第一个绑定仍然有效,但其他两个不会。

是否有直接的解决方案,或者我是否需要解决方法?

1 个答案:

答案 0 :(得分:2)

Jobo建议将VB.NET类放入程序集中,并在 C#项目中引用它之后, 我发现了为什么你不能直接绑定到多个索引属性。

在幕后,为每个额外索引属性生成两个方法:get_Xset_X,其中X是索引属性的名称。

这意味着VB.NET索引属性(未标记为Default,实际上不存在。这就是为什么我的问题中的XAML绑定说它找不到属性ItemItem2 ...

这个问题可能有多种解决方法。例如,您可以创建一个包含索引器属性的小类,然后在MainWindow中创建该类的多个实例。

另一种解决方法可能是绑定到get_X的返回值,但我只能想象这会有多刺激,因为这样你就不会得到INotifyPropertyChanged的好处。