2012-12-13 3 views
0

Я в тупике. У меня есть следующий XML, я думаю, что он был взят из другого вопроса StackOverflow.Bind xml to combobox

<?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 Имя' т.е. Прямоугольный в ComboBox. Этот бит работает. Но я хочу, чтобы идентификатор использовался при добавлении данных. как испытание, я написал следующее

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

Ожидая увидеть 1/3, когда Прямоугольный была выбрана или 1/15, когда была выбрана «Другие формы», но ничего.

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

Хорошо, спасибо, Джон. – James

ответ

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

+0

Спасибо. Я искал в Интернете 2 дня, ища это решение. спасибо – James

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

Должно быть:

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

, без SelectedValue набора. Вы были на правильном пути, только немного перепутали атрибуты. :)

+0

Спасибо Стив. Я попробовал это раньше. Но в моем окне сообщения отображается @id. Есть ли что-нибудь, что я сделал, чтобы изменить в MessageBox.Show заявление, чтобы отобразить ID как 1/15 и т. Д. Спасибо за помощь. – James

Смежные вопросы