我很难过。 我有以下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,但没有。
答案 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