0

次のような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>

これは、ListBox2つの要素、、、Item 1およびaとaItem 2を含む2つの行を含むことを示しています。プロパティをそれぞれにバインドし、選択したアイテムのプロパティをバインドすることはできますか?上記のコードは、選択したアイテムのに1つをバインドします。これは、表示したい値ではないことを除いて、正しく機能します。私が本当に必要としているのは、XPathのソースを指定して一致する値を見つけることだと思いますが、最初にその比較を行う方法がわかりません。次に、より良い方法があるかどうかを知りたいと思います。まったく1つです。TextBoxLabelLabel.ContentFirstPropertySecondPropertyListBoxLabelitemList

これが不可能な場合、私が考えることができる唯一の解決策は、SelectionChangedイベントハンドラーでプログラム的に実行することです。それはうまくいくでしょうが、私はむしろそのような振る舞いを分割する必要はありません。

4

1 に答える 1

1

このような何かがトリックを行います、

Itemsに直接バインドし、ノードから必要なプロパティを表示するListBoxために使用します。DisplayMemberpathItem

次に、Label DataContextをノードに設定することにより、を介してListBox SelectedItemすべてのプロパティにアクセスできます。XPathLabel Content

<Grid>
    <Grid.Resources>
        <XmlDataProvider x:Key="ItemsXml" XPath="Items/Item" Source="Items.xml" />
    </Grid.Resources>
    <ListBox Name="itemList" Width="172" 
             ItemsSource="{Binding Source={StaticResource ItemsXml}}"
             DisplayMemberPath="Name" Margin="0,0,570,0" />

    <Label DataContext="{Binding SelectedItem, ElementName=itemList}" 
           Content="{Binding XPath=FirstProperty}" Width="160" Height="30" Margin="178,48,403,233" />

    <Label DataContext="{Binding SelectedItem, ElementName=itemList}" 
           Content="{Binding XPath=SecondProperty}" Width="160" Height="30" Margin="178,12,403,269" />
</Grid>
于 2012-12-08T03:04:32.930 に答える