Привязка данных веб-сервиса к ListBox DataTemplate WP7 - PullRequest
0 голосов
/ 12 августа 2011

Я пытаюсь прочитать данные с помощью веб-службы и отобразить их на расцененном lisBox, как показано ниже, но это не сработало.«Когда я выполняю отладку, на экране приложения телефона не отображается список»

Код XAML:

 <ListBox Height="500" HorizontalAlignment="Left" 
         Margin="8,47,0,0" 
         Name="friendsBox" VerticalAlignment="Top" Width="440">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Height="100" Width="100" 
                       VerticalAlignment="Top" Margin="0,10,8,0"
                       Source="{Binding Photo}"/>
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="{Binding Nom}" FontSize="28" TextWrapping="Wrap" Style="{StaticResource PhoneTextAccentStyle}"/>
                    <TextBlock   />
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Код C #:

void friends_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    if (e.Error == null)
    {
        ListBoxItem areaItem = null;
        StringReader stream = new StringReader(e.Result);
        XmlReader reader = XmlReader.Create(stream);

        string Nom = String.Empty;
        string Photo = String.Empty;

        while (reader.Read())
        {
            if (reader.NodeType == XmlNodeType.Element)
            {

                if (reader.Name == "nom")
                {

                    Nom = reader.ReadElementContentAsString();

                    areaItem = new ListBoxItem();
                    areaItem.Content = Nom;
                    friendsBox.Items.Add(Nom);
                }
                if (reader.Name == "photo")
                {

                    Photo = reader.ReadElementContentAsString();

                    areaItem = new ListBoxItem();
                    areaItem.Content = Photo;
                    friendsBox.Items.Add(Photo);
                }
            }
        }
    }
}

1 Ответ

5 голосов
/ 14 августа 2011

Проблема связана с непоследовательным способом управления вашими данными. Синтаксис привязки данных в XAML не соответствует тому, как вы вручную загружаете элементы в коде. Не видя структуру вашего XML, я сделаю вывод, что каждый из элементов, которые вы пытаетесь отобразить в ListBox, имеет два свойства - nom и photo. Если это так, вы можете легко решить возникшую проблему, заменив код в своем коде следующим:

// create this additional class to hold the binding data
public class ViewData
{
    public string Nom { get; set; }
    public string Photo { get; set; }
}

void friends_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    if (e.Error == null)
    {
      var doc = XDocument.Load(new StringReader(e.Result));
      var items = from item in doc.Element("data").Elements("item")
                  select new ViewData
                  {
                      Nom = item.Element("nom").Value,
                      Photo = item.Element("photo").Value,
                  };
      friendsBox.ItemsSource = items;
  }
}

Вам нужно будет добавить ссылку на System.Xml.Linq и добавить соответствующий оператор using в ваш код.

НТН!

Chris

...