Привязка данных webService к ListBox DataTemplate WP7

Я пытаюсь прочитать данные с помощью веб-службы и отобразить их на костюмированном 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>

Код С#:

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);
                }
            }
        }
    }
}

person MarTech    schedule 12.08.2011    source источник
comment
В чем именно заключается ваш вопрос? Вам нужно быть более конкретным? Где это терпит неудачу? какая ошибка/исключение?   -  person ColinE    schedule 12.08.2011


Ответы (1)


Проблема связана с непоследовательным способом управления данными. Синтаксис привязки данных в 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 в свой код.

ХТХ!

Крис

person Chris Koenig    schedule 14.08.2011