2013-06-30 5 views
0

У меня возникла странная проблема с моим списком со списком стран мира. Я использую XML файл (AllCountries.xml), как мой источник данных:wpf combobox multibinding to xml file странная ошибка

<?xml version="1.0" encoding="utf-8"?> 
<countries> 
    <country> 
    <iso>AF</iso> 
    <name>Afghanistan</name> 
    </country> 
    <country> 
    <iso>AL</iso> 
    <name>Albania</name> 
    </country> 
    <country> 
    <iso>DZ</iso> 
    <name>Algeria</name> 
    </country> 
    <country> 
    <iso>AS</iso> 
    <name>American Samoa</name> 
    </country> 
    <country> 
    <iso>AD</iso> 
    <name>Andorra</name> 
    </country> etc 

Мой выпадающий XAML выглядит следующим образом:

<ComboBox 
     Width="200" 
     SelectedValuePath="Country" 
     ItemsSource="{Binding XPath=/countries/country/name}"> 
     <ComboBox.DataContext> 
     <XmlDataProvider x:Name="Dataxml" Source="\Content\AllCountries.xml" /> 
     </ComboBox.DataContext> 
</ComboBox> 

И все прекрасно работает: Я вижу, Албания, Афганистан, Algerie ++ +. ОК, так что я хочу, чтобы иметь соответствующий (ISO) код, отображаемый в раскрывающемся списке, как это:

Афганистан, AF

Албания, AL

Algerie, DZ

и так далее. Для достижения этой цели я добавить ItemTemplate к моему выпадающий список:

<ComboBox.ItemTemplate> 
    <DataTemplate> 
      <TextBlock> 
       <TextBlock.Text> 
        <MultiBinding StringFormat="{}{0}, {1}"> 
          <Binding XPath="/countries/country/name" /> 
          <Binding XPath="/countries/country/iso" /> 
        </MultiBinding> 
       </TextBlock.Text> 
      </TextBlock> 
    </DataTemplate> 
</ComboBox.ItemTemplate> 

При запуске приложения все, кажется, все в порядке - пока не нажать на выпадающий список и увидите следующий список отображения:

Афганистан, А. Ф.

Афганистан, А. Ф.

Афганистан, А. Ф.

Афганистан, А. Ф.

Афганистан, А. Ф.

Афганистан, А. Ф.

Афганистан, А. Ф.

Афганистан, А. Ф.

Афганистан, А. Ф.

Афганистан, А. Ф. ....

:-(Что-то, очевидно, не так с моим многопотоком XPath, но я не могу выясните это. Что тут происходит???

ответ

2

Это должно работать

ItemsSource="{Binding XPath=/countries/country}" 

с

<MultiBinding StringFormat="{}{0}, {1}"> 
    <Binding XPath="name" /> 
    <Binding XPath="iso" /> 
</MultiBinding> 

, потому что тогда каждый ComboBoxItem имеет страну DataContext.

+0

Thanks mate! Ваше решение работает как шарм! – JorgenH

0

Вы также можете попробовать установить ItemTemplate так, чтобы разместить 2 TextBlocks внутри и по каждой ссылке!

<ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding XPath="/countries/country/name" }" /> 
      <TextBlock Text="{Binding XPath="/countries/country/iso" }" /> 
     </DataTemplate> 
     </ComboBox.ItemTemplate> 
</ComboBox> 
+0

Sorry Manolis - ваше решение дает «Объект« DataTemplate »уже имеет дочерний элемент и не может добавить« TextBlock ».« DataTemplate »может принимать только одного ребенка». Но спасибо в любом случае за попытку помочь - я приступаю к этому! – JorgenH

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

  • Нет связанных вопросов^_^