バインディング式をプログラムで解決する方法はありますか?公開したくない複雑な内部動作がたくさんあるテンプレート化されたコントロールがあります。リストを取得し、完全なアイテムビューのテンプレートと、個々のアイテムテンプレートを変更するための詳細を公開します。コントロールにバインディングパスとして3つのプロパティを設定したいので、次のようにテンプレートを公開できます。
<src:MyControl x:Name="MyControl"
FullViewTemplate="{StaticResource FullViewTemplate}"
TopValueBinding="Items[2]"
BottomValueBinding="Items[6]"
CategoryBinding="Items[5]"/>
内部では、データコンテキスト全体を取得して値コンバーターに提供します。これにより、構成可能なバインディングパスが解決されます。このようなもの:
PropertyPath path = new PropertyPath("Items[0]");
var value = Convert.ToDecimal(path.Resolve(dataSource));
現在、プロパティ名とリフレクションを使用して値を抽出していますが、これには複雑なデータ型を処理する柔軟性がなく、フィールド値を取得するために解析とリフレクションロジックの大規模なブロックを作成する必要はありません。
編集:あるいは、このようなことができるのは素晴らしいことです:
{Binding Path={TemplateBinding BottomValueMember}, Converter={StaticResource ScaleValueConverter}}
しかし、これはうまくいかないようです。何かご意見は?