しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

DataContext と ItemsSource

ListBox の ItemsSource にコレクションを突っ込むと、コンテナ*1の DataContext にコレクションの要素が入るっぽいです。DataContext は子オブジェクトまで継承されるので、DataTemplate 内の Binding マークアップ拡張で Source を指定しなくてもいいというからくりみたい。
つまり ListBoxItem のスタイル内でも Binding を使えばオブジェクトの参照ができます。ListBoxItem.ContextMenu でも Binding で参照できたりするので、応用範囲がかなり広がります。
私は Command + CommandParameter と Binding を使って、MiniTwitter の右クリックメニューを実装したりしてみました。C# 側は全く弄らずに XAML 側に書き加えるだけで簡単に実装できました。

*1:ここでは ListBoxItem。