这是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
的标记。对于将来使用此问题的人来说,现在看来是这样的:
<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>
答案 0 :(得分:1)
您的DataTemplate
应位于<ListBox.ItemTemplate>
下以获取第二个列表。目前,您正在其下直接设置,这就是您看到类名的原因。由于您直接使用集合设置DataContext
,因此您必须设置ItemsSource={Binding}