我有一个类似
的XML文件<Items>
<Item>
<Name>Item 1</Name>
<FirstProperty>42</FirstProperty>
<SecondProperty>37</SecondProperty>
</Item>
<Item>
<Name>Item 2</Name>
<FirstProperty>11</FirstProperty>
<SecondProperty>35</SecondProperty>
</Item>
</Items>
和一个看起来像
的XAML文件<Grid>
<Grid.Resources>
<XmlDataProvider x:Key="ItemsXml" XPath="Items/Item" Source="Items.xml"/>
</Grid.Resources>
<ListBox Name="itemList" HorizontalAlignment="Left"
ItemsSource="{Binding Source={StaticResource ItemsXml}, XPath=//Name}"/>
<TextBox HorizontalAlignment="Right" VerticalAlignment="Top" Margin="80,0" Width="30"/>
<TextBox HorizontalAlignment="Right" VerticalAlignment="Top" Margin="80,50" Width="30"/>
<Label HorizontalAlignment="Right" VerticalAlignment="Top"
Content="{Binding ElementName=areaList, Path=SelectedValue}"/>
<Label HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,50" Content="Bind me?"/>
</Grid>
这会显示ListBox
包含两个元素Item 1
和Item 2
,以及两行包含TextBox
和Label
的元素。是否可以将Label.Content
属性绑定到FirstProperty
中所选项目的SecondProperty
和ListBox
?上面的代码将一个Label
绑定到所选项目的值,这可以正常工作,除了不是我想要显示的值。我猜我真正需要的是指定itemList
的来源并找到与XPath匹配的值,但首先我不知道如何进行这种比较,其次我很想知道是否有更好的方法,假设有一个。
如果这不可能,我能想到的唯一解决方案是在SelectionChanged
事件处理程序中以编程方式执行此操作。这样可行,但我宁愿不必将这种行为分开。
答案 0 :(得分:1)
像这样的事情应该做到这一点,
将Items
直接绑定到ListBox
并使用DisplayMemberpath
从Item
节点显示所需的属性。
然后,通过将Label
DataContext
设置为ListBox
SelectedItem
节点,您可以通过XPath
{{Label
访问所有媒体资源1}}
Content