1

このプロパティへのバインドは非常に簡単です。

public Foo MyFoo {get; set;}

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

ここ XAML では、次のことができるためです。

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

しかし、2 番目のインデックス付きプロパティがある場合はどうなるでしょうか。

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

最初のバインドは引き続き機能しますが、他の 2 つは機能しません。

これに対する直接的な解決策はありますか、それとも回避策が必要ですか?

4

1 に答える 1

2

VB.NET クラスをアセンブリに配置し、C#プロジェクトでそれを参照するというJoboの提案の後、複数のインデックス付きプロパティに直接バインド できない理由がわかりました。

内部では、追加のインデックス付きプロパティごとに と の 2 つのメソッドが生成されます。ここget_Xで、 はインデックス付きプロパティの名前です。set_XX

これは、 としてマークされていない VB.NET インデックス付きプロパティがDefault実際には存在しないことを意味します。これが、私の質問の XAML バインディングで、プロパティが見つからない、ItemまたはItem2...

おそらく、この問題には複数の回避策があります。たとえば、インデクサー プロパティを含む小さなクラスを作成し、そのクラスの複数のインスタンスをMainWindow.

別の回避策として の戻り値にバインドすることもできますがget_X、この方法ではINotifyPropertyChanged.

于 2013-02-01T12:27:49.907 に答える