在SelectionChanged上将Label更新为XML文件中的值

时间:2012-12-07 22:54:53

标签: c# wpf xaml

我有一个类似

的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 1Item 2,以及两行包含TextBoxLabel的元素。是否可以将Label.Content属性绑定到FirstProperty中所选项目的SecondPropertyListBox?上面的代码将一个Label绑定到所选项目的,这可以正常工作,除了不是我想要显示的值。我猜我真正需要的是指定itemList的来源并找到与XPath匹配的值,但首先我不知道如何进行这种比较,其次我很想知道是否有更好的方法,假设有一个。

如果这不可能,我能想到的唯一解决方案是在SelectionChanged事件处理程序中以编程方式执行此操作。这样可行,但我宁愿不必将这种行为分开。

1 个答案:

答案 0 :(得分:1)

像这样的事情应该做到这一点,

Items直接绑定到ListBox并使用DisplayMemberpathItem节点显示所需的属性。

然后,通过将Label DataContext设置为ListBox SelectedItem节点,您可以通过XPath {{Label访问所有媒体资源1}}

Content