2013-09-02 5 views
0

Я пытаюсь сделать LongListSelector из данных файла xml.WP8, работающий с XML и LongListSelector

public MainPage() 
    { 
     InitializeComponent(); 

     XDocument loadedData = XDocument.Load("/Resources/EuroTrip.xml"); 

     var data = from query in loadedData.Descendants("country") 
        select new Country 
        { 
         Name = (string)query.Element("name"), 
         IdentityCard = (string)query.Element("identityCard"), 
         CompulsoryDocuments = (string)query.Element("compulsoryDocuments"), 
         Regulations = (string)query.Element("regulations"), 
         Equipment = (string)query.Element("equipment"), 
         SpeedLimitsLightVehicles = (string)query.Element("speedLimitsLightVehicles"), 
         AutoClubs = (string)query.Element("autoClubs") 
        }; 
     countriesList.ItemsSource = data; 
     // Set the data context of the listbox control to the sample data 
     DataContext = App.ViewModel; 
    } 

    public class Country 
{ 
    string name; 
    string identityCard; 
    string compulsoryDocuments; 
    string regulations; 
    string equipment; 
    string speedLimitsLightVehicles; 
    string autoClubs; 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    public string IdentityCard 
    { 
     get { return identityCard; } 
     set { identityCard = value; } 
    } 

    public string CompulsoryDocuments 
    { 
     get { return compulsoryDocuments; } 
     set { compulsoryDocuments = value; } 
    } 

    public string Regulations 
    { 
     get { return regulations; } 
     set { regulations = value; } 
    } 

    public string Equipment 
    { 
     get { return equipment; } 
     set { equipment = value; } 
    } 

    public string SpeedLimitsLightVehicles 
    { 
     get { return speedLimitsLightVehicles; } 
     set { speedLimitsLightVehicles = value; } 
    } 

    public string AutoClubs 
    { 
     get { return autoClubs; } 
     set { autoClubs = value; } 
    } 
    } 

Я использовал этот учебник: http://www.geekchamp.com/tips/wp7-working-with-xml-reading-filtering-and-databinding , но я получил ошибку на этой линии:

  countriesList.ItemsSource = data; 

Ошибка говорит:

Явное преобразование существует (Вы не нашел литой?)

Я думаю, потому что LongListSelector в WP7 и WP8 не использует одни и те же элементы управления, но я не знаю, что я должен изменить, и я не нашел полезной статьи об этом.

Спасибо за вашу помощь :)

EDIT: это XAML-код, где я хотел бы, чтобы связать данные:

  <!--Pivot item two--> 
     <phone:PivotItem Header="Countries"> 
      <!--Double line list no text wrapping--> 
      <phone:LongListSelector IsGroupingEnabled="False" x:Name="countriesList" Margin="0,0,-12,0" ItemsSource="{Binding Items}"> 
       <phone:LongListSelector.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Margin="0,0,0,17"> 
          <!--Image Width="60" Source="{Binding Photo}" Margin="12,6" HorizontalAlignment="Left"/--> 
          <TextBlock VerticalAlignment="Center" Text="{Binding LineOne}" TextWrapping="NoWrap" Margin="82,0,0,0" Style="{StaticResource PhoneTextExtraLargeStyle}" Foreground="Black"/> 
          <TextBlock VerticalAlignment="Center" Text="{Binding LineTwo}" TextWrapping="NoWrap" Margin="82,-6,0,0" Style="{StaticResource PhoneTextSubtleStyle}" Foreground="Black"/> 
         </StackPanel> 
        </DataTemplate> 
       </phone:LongListSelector.ItemTemplate> 
      </phone:LongListSelector> 
     </phone:PivotItem> 

ответ

1

LongListSelector может принимать только список в качестве источника данных. Просто вызовите метод .ToList() на запросе Linq:

countriesList.ItemsSource = data.ToList(); 

Edit: Чтобы ответить на комментарий, я не уверен, что вы имеете в виду.

Вы привязываете LongListSelector к «Items», поэтому вам нужно предоставить свой список стран в свойстве «Items» вашей модели. Затем в ItemTemplate LongListSelector привяжите элементы управления к свойствам вашего класса Country:

<phone:PivotItem Header="Countries"> 
     <phone:LongListSelector IsGroupingEnabled="False" x:Name="countriesList" Margin="0,0,-12,0" ItemsSource="{Binding Items}"> 
      <phone:LongListSelector.ItemTemplate> 
       <DataTemplate> 
         <!-- Displays the name of the country --> 
         <TextBlock Text="{Binding Name}" /> 
       </DataTemplate> 
      </phone:LongListSelector.ItemTemplate> 
     </phone:LongListSelector> 
    </phone:PivotItem> 
+0

Как я могу сделать каждую страну предметом? Кроме того, когда я пытаюсь создать решение, я получаю сообщение об ошибке «XDocument xml = XDocument.Load («/Resources/EuroTrip.xml »);' Исключение типа «System.Xml.XmlException» произошло в System .Xml.ni.dll, но не был обработан в коде пользователя – Skynet

+0

@ user2740682 Каждая страна автоматически является «элементом». Если вы назначите список стран для своего LongListSelector, он создаст элемент для каждой страны. Для вашей ошибки XML это может означать, что вы не установили действие сборки вашего XML-файла в «Содержимое». Это также может означать, что ваш XML-файл недействителен. Проверьте внутреннее исключение для более подробной информации. –

+0

В нем говорится, что он не может найти файл в пакете xap: http://grab.by/pU2q Но он есть и установлен в «Содержимое»: http://grab.by/pU34 @KooKiz – Skynet

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