绑定到此属性非常简单:
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"]}"/>
第一个绑定仍然有效,但其他两个不会。
是否有直接的解决方案,或者我是否需要解决方法?
答案 0 :(得分:2)
在Jobo建议将VB.NET类放入程序集中,并在 C#项目中引用它之后, 我发现了为什么你不能直接绑定到多个索引属性。
在幕后,为每个额外索引属性生成两个方法:get_X
和set_X
,其中X
是索引属性的名称。
这意味着VB.NET索引属性(未标记为Default
,实际上不存在。这就是为什么我的问题中的XAML绑定说它找不到属性Item
或Item2
...
这个问题可能有多种解决方法。例如,您可以创建一个包含索引器属性的小类,然后在MainWindow
中创建该类的多个实例。
另一种解决方法可能是绑定到get_X
的返回值,但我只能想象这会有多刺激,因为这样你就不会得到INotifyPropertyChanged
的好处。