将xml绑定到组合框

时间:2012-12-13 21:16:38

标签: c# wpf xml

我很难过。 我有以下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下面

  <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" />

我希望用户在组合框中看到'Shape Name',即Rectangular。这个位有效。但是我希望在添加数据时使用id。作为测试,我写了以下

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

选择矩形时期望看到1/3,或者选择'其他形状'时看到1/15,但没有。

2 个答案:

答案 0 :(得分:0)

<ComboBox ... DisplayMemberPath="@Name" SelectedValuePath="{Binding Source={StaticResource xmlData}, XPath=./Shape}" SelectedValue="@id" />

应该是:

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

未设置SelectedValue。你是在正确的道路上,只是把属性混淆了一点。 :)

答案 1 :(得分: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

中定义的值