コレクションをItemSourceにバインドするとコレクションの要素にアクセスできる代わりにDataContextのプロパティが見えなくなりました。よく考えると当たり前ですけどハマりました。
RelativeSource
こんな感じでバインドの設定をすると親のDataContextにアクセスできました。
"{Binding Path=DataContext.[プロパティ], RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"
ここでRelativeSource FindAncestor
は現在の要素からみて親のほうを検索します。FindAncestor
はAncestorType
を指定することができ、Typeでwindow(またはUserContorol)を指定すればDataContextにたどり着くことができます。さらにAncestorLevel
を指定すると親を辿って何番目に見つかったものを使用する。といったこともできるようです。
XAMLは親子関係がわかりやすいので使いこなせればいろいろと応用できそうです。