インデクサは、これが動作しなければならないので、変換が自動的に行われるべき特定のタイプがある場合:
{Binding theDictionary[ns:OnePrettyType]}
を明示的な解釈が必要な場合は、次のような "キャスト"を試すことができます:
{Binding theDictionary[(sys:Type)ns:OnePrettyType]}
(sys
はもちろんSystem
名前空間にマップされています)
これは理論に過ぎませんが、それはうまくいかないでしょう。まず、パスを取るBinding
コンストラクタを使用すると、特定の方法でPropertyPath
という特定のコンストラクタを使用するため、キャストは無視されます。また、あなたは、バインディングエラーが発生します。
System.Windows.Data Error: 40 : BindingExpression path error: '[]' property not found on 'object' ''Dictionary`2'
あなたはそれがBinding
コンストラクタを回避することにより、型コンバータを介してPropertyPath
を構築するために必要があるでしょう:
今
{Binding Path=theDictionary[(sys:Type)ns:OnePrettyType]}
これが最も可能性が高いだけ例外がスローされます:
残念ながらデフォルトタイプの変換は行われません。 PropertyPath
をXAMLで構築し、型が渡されていることを確認できますが、クラスはXAMLで使用するためのものではありません。また、試してみると例外がスローされます。
1つの回避策は、マークアップ拡張を作成することです。
<Binding>
<Binding.Path>
<me:PathConstructor Path="theDictionary[(0)]">
<x:Type TypeName="ns:OnePrettyType" />
</me:PathConstructor>
</Binding.Path>
</Binding>
またはこの
{Binding Path={me:PathConstructor theDictionary[(0)], {x:Type ns:OnePrettyType}}}
辞書やその他の値にバインドするのではなく、仕事を行うビューモデルにプロパティを公開します。 –