<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<WrapPanel>
<WrapPanel.Resources>
<XmlDataProvider x:Key="Grid" XPath="/Test/*">
<x:XData>
<Test xmlns="">
<i Display="×1" ID="1"/>
<i Display="×2" ID="2"/>
<i Display="×4" ID="4"/>
<i Display="×8" ID="8"/>
</Test>
</x:XData>
</XmlDataProvider>
<DataTemplate x:Key="GridItemTemplate">
<TextBlock Text="{Binding XPath=@Display}"/>
</DataTemplate>
</WrapPanel.Resources>
<ComboBox
Name="ScaleSelecter"
ItemsSource="{Binding Source={StaticResource Grid}}"
ItemTemplate="{StaticResource GridItemTemplate}"
SelectedValue="1"
SelectedValuePath="@ID"/>
<TextBox
Text="{Binding ElementName=ScaleSelecter,Path=SelectedValue}"/>
</WrapPanel>
</Window>
<解説>
リソース内ではふたつのオブジェクトが作成されている
・XmlDataProviderオブジェクト 利用するデーターをXMLとして作成している。
・DataTemplateオブジェクト 表示方法を決定している
XmlDataProviderオブジェクトのx:Keyはリソースの名前を、XPathではXMLの参照する階層と抽出方法を設定している。ここではTest階層の下にあるオブジェクトを*のワイルドカードにして参照している。
<x:XData>でデータの設定開始をあらわし<Test xmlns="">ではTest.xmlであることを宣言している。xmlnsは参照先を指定しているがここでは空にして続くオブジェクトを設定している(ここでファイルやデーターベースのURLを参照しても良いらしい?)
(プロパティに@マークをつける理由は要調査。今は暫定的にXMLのオブジェクト名を「i」にしてるがこれも要調査)
WrapPanel内のコンボボックスでこのふたつのリソースオブジェクトを利用している
注目点はSelectedValuePathプロパティであり、これでアイテムの参照先を決定している
最終更新:2012年09月27日 00:54