1

绑定到这个属性相当简单:

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"]}"/>

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

有没有直接的解决方案,还是我需要解决方法?

4

1 回答 1

2

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

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

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

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

另一种解决方法可能是绑定到 的返回值get_X,但我只能想象这会变得多么令人恼火,因为这样您将无法获得INotifyPropertyChanged.

于 2013-02-01T12:27:49.907 回答