XML は次のとおりです。
<Items>
<Item>
<Name>Item1</Name>
<Links>
<Link>
<LinkText>Image 1</LinkText>
<LinkUri>Images/Image1.jpg</LinkUri>
</Link>
<Link>
<LinkText>Image 2</LinkText>
<LinkUri>Images/Image2.jpg</LinkUri>
</Link>
</Links>
</Item>
<Item>
<Name>Item2</Name>
<Links>
<Link>
<LinkText>Image 3</LinkText>
<LinkUri>Images/Image3.jpg</LinkUri>
</Link>
<Link>
<LinkText>Image 4</LinkText>
<LinkUri>Images/Image4.jpg</LinkUri>
</Link>
</Links>
</Item>
</Items>
これが最初のバインディングですListBox
<Grid.Resources>
<XmlDataProvider
x:Key="Items"
Source="ScannerProblems.xml"
XPath="Items" />
</Grid.Resources>
<ListBox
x:Name="lstProblems"
Grid.Row="0"
Grid.RowSpan="3"
Grid.Column="0"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Source={StaticResource Items}, XPath=Item}"
DisplayMemberPath="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border
Background="#2200FF00"
BorderBrush="Black"
BorderThickness="1"
CornerRadius="8"
Margin="2,4,2,4"
Padding="4">
<StackPanel
x:Name="sp">
<TextBlock
FontWeight="Bold">Problem Description</TextBlock>
<TextBlock
Width="{Binding ElementName=sp, Path=ActualWidth}"
Text="{Binding XPath=Name}"
TextWrapping="Wrap" />
</StackPanel>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemContainerStyle>
<Style
TargetType="ListBoxItem">
<Setter
Property="HorizontalContentAlignment"
Value="Stretch" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
そこからListBox
アイテムを選んでいきます。ListBox
そのアイテムを選択すると、その選択したアイテムの XML からのリンク アイテムが別のアイテムに取り込まれます。それは簡単なことのように思えますが、私が試したさまざまなことで、空またはListBox
(時間のリストではなく、一度だけ)のいずれかが得られます。System.Windows.DataTemplate
ListBox
編集:ここから、私は変更しました。これは、ListBox
提案された変更を行った後の 2 番目のマークアップです。将来この質問を使用する人には、次のように表示されます。
<ListBox
DataContext="{Binding SelectedItem, ElementName=lstProblems}"
ItemsSource="{Binding XPath=Links/Link}"
Grid.Row="1"
Grid.Column="1"
Grid.ColumnSpan="2"
IsSynchronizedWithCurrentItem="False">
<ListBox.ItemTemplate>
<DataTemplate>
<Button Content="{Binding}">
<Button.ContentTemplate>
<DataTemplate>
<StackPanel>
<Image
Margin="10"
MaxHeight="200"
Source="{Binding XPath=LinkUri}" />
<TextBlock
Text="{Binding XPath=LinkText}"
TextWrapping="Wrap"
Margin="10,0,10,20" />
</StackPanel>
</DataTemplate>
</Button.ContentTemplate>
</Button>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>