しらとりのブログ

社会人ひよこプログラマのtil

DataTemplateの中からDataContextのプロパティにバインドできなくてハマったこと

コレクションをItemSourceにバインドするとコレクションの要素にアクセスできる代わりにDataContextのプロパティが見えなくなりました。よく考えると当たり前ですけどハマりました。

RelativeSource

こんな感じでバインドの設定をすると親のDataContextにアクセスできました。

"{Binding Path=DataContext.[プロパティ], RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"

ここでRelativeSource FindAncestorは現在の要素からみて親のほうを検索します。FindAncestorAncestorTypeを指定することができ、Typeでwindow(またはUserContorol)を指定すればDataContextにたどり着くことができます。さらにAncestorLevelを指定すると親を辿って何番目に見つかったものを使用する。といったこともできるようです。

XAMLは親子関係がわかりやすいので使いこなせればいろいろと応用できそうです。