0

私は困惑しています。私は次のXMLを持っていますが、実際には別のStackOverflowの質問から取ったものだと思います。

<?xml version="1.0" encoding="utf-8" ?>
<HousingShapes>
<Shape Name="Rectangular" id="1/3"/>
<Shape Name="Circular" id="1/34" />
<Shape Name="Triangular" id="1/23" />
<Shape Name="Other Shape" id="1/15" />
</HousingShapes>

XAMLでこのようにデータをバインドしました

<Window.Resources>
    <XmlDataProvider x:Key="xmlData" Source="d:\people.xml" XPath="HousingShapes"/>
</Window.Resources>

そして、以下の私のコンボボックス

  <ComboBox Height="23" HorizontalAlignment="Left" Margin="97,52,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" ItemsSource="{Binding Source={StaticResource xmlData}, XPath=./Shape}" DisplayMemberPath="@Name" SelectedValuePath="{Binding Source={StaticResource xmlData}, XPath=./Shape}" SelectedValue="@id" />

コンボボックスに「形状名」、つまり長方形が表示されるようにします。このビットは機能します。ただし、データを追加するときにIDを使用する必要があります。テストとして、私は次のように書いた

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show(comboBox1.SelectedValuePath);
    }

長方形が選択された場合は1/3、「その他の形状」が選択された場合は1/15になると予想されますが、何も表示されません。

4

2 に答える 2

0

ここでの2つの問題、最初SelectedValuePathに@idに設定する必要があります

  <Window.Resources>
        <XmlDataProvider x:Key="xmlData" Source="C:\people.xml" XPath="HousingShapes/Shape"/>
    </Window.Resources>

    <Grid>
        <ComboBox Height="23" ItemsSource="{Binding Source={StaticResource xmlData}}" DisplayMemberPath="@Name" SelectedValuePath="@id" />
    </Grid>

次に、MessageBoxにが表示SelectedValuePathされます。Selectedvalue

 MessageBox.Show(comboBox1.SelectedValue.ToString());

Selectedvalueで定義された値を返しますSelectedValuePath

于 2012-12-13T21:52:39.573 に答える
0
<ComboBox ... DisplayMemberPath="@Name" SelectedValuePath="{Binding Source={StaticResource xmlData}, XPath=./Shape}" SelectedValue="@id" />

する必要があります:

DisplayMemberPath="@Name" SelectedValuePath="@id"

セットなしSelectedValue。あなたは正しい道を進んでいました、ちょうど属性を少し混乱させました。:)

于 2012-12-13T21:45:47.697 に答える