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
<ComboBox ... DisplayMemberPath="@Name" SelectedValuePath="{Binding Source={StaticResource xmlData}, XPath=./Shape}" SelectedValue="@id" />

应该:

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

没有SelectedValue设置。您走在正确的道路上,只是将属性混淆了一点。:)

于 2012-12-13T21:45:47.697 回答
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 回答