この投稿では、惑星を含む太陽系をデータソースとして使用します。ListBoxで惑星の名前をクリックすると、惑星の画像とその情報がContentControlに表示されます。 ListBoxはウィザードの役割を果たし、ContentControlは詳細情報を提供します。
リソースセクションのWindowクラスには、惑星データを含むXmlDataProviderと、プロバイダーに関連付けられたSourceプロパティを持つCollectionViewSourceがあります。 このコードは、ListBoxをCollectionViewSourceに関連付けます。
<! – master – > < ListBox ItemsSource =”{ Binding Source ={ StaticResource cvs }}” DisplayMemberPath =”@ Name ” Padding =” 5 ″ Margin =” 0 , 0 , 5 , 0 ″ /> * This source code was highlighted with Source Code Highlighter .
<! – master – > < ListBox ItemsSource =”{ Binding Source ={ StaticResource cvs }}” DisplayMemberPath =”@ Name ” Padding =” 5 ″ Margin =” 0 , 0 , 5 , 0 ″ /> * This source code was highlighted with Source Code Highlighter .
<! – master – > < ListBox ItemsSource =”{ Binding Source ={ StaticResource cvs }}” DisplayMemberPath =”@ Name ” Padding =” 5 ″ Margin =” 0 , 0 , 5 , 0 ″ /> * This source code was highlighted with Source Code Highlighter .
<! – master – > < ListBox ItemsSource =”{ Binding Source ={ StaticResource cvs }}” DisplayMemberPath =”@ Name ” Padding =” 5 ″ Margin =” 0 , 0 , 5 , 0 ″ /> * This source code was highlighted with Source Code Highlighter .
また、選択したアイテムに関する詳細情報を表示するために使用されるContentControlも必要です。 以下のコードは最初は少し奇妙に見えるかもしれません:ContentControl(1つの要素を表示する)を要素のコレクションに関連付けていますか? (このバインディングは上記のListBoxと同じであることに注意してください。)データバインディングエンジンは2つの目標の違いを見つけるのに十分スマートであるため、このコードは問題なく機能します。 ItemsControlがコレクションにバインドされると、コレクションが取得されます。 ContentControlがコレクションにバインドされると、コレクションの現在の(現在の)要素を取得します。 これにより、WPFでマスター/詳細スクリプトを非常に簡単に使用できます。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- <! -詳細- >
- < ContentControl ContentTemplate =” { StaticResource detailTemplate }” Content =” { Binding Source = { StaticResource cvs }}” />
ContentControlで詳細情報を表示する方法を決定するには、DataTemplateを使用します。 次のコードは、このテンプレートの最も興味深い部分を説明しています。 バインディングはXMLで発生するため、パスではなくXPathを使用します。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- < DataTemplate x:Key =” detailTemplate ” >
- (...)
- < Image Source =” { Binding XPath = Image 、 Converter = { StaticResource stringToImageSource }}” />
- (...)
- < StackPanel Orientation =” Horizontal ” Margin =” 5、5、5、0 ? >
- < TextBlock Text =” Orbit: ” FontWeight =” Bold ” />
- < TextBlock Text =” { バインディング XPath = オービット }” />
- </ stackpanel >
- < StackPanel Orientation =” Horizontal ” Margin =” 5、0、5、0 ? >
- < TextBlock Text =” Diameter: ” FontWeight =” Bold ” />
- < TextBlock Text =” { バインディング XPath = Diameter }” />
- </ stackpanel >
- < StackPanel Orientation =” Horizontal ” Margin =” 5、0、5、5 ? >
- < TextBlock Text =” Mass: ” FontWeight =” Bold ” />
- < TextBlock Text =” { バインディング XPath = Mass }” />
- </ stackpanel >
- (...)
- </ DataTemplate >
完成したサンプルのスクリーンショットを次に示します。
ここでは、記事で使用されたコードを含むVisual Studioのプロジェクトを見つけることができます。