0

我正在尝试使用 Web 服务读取数据并将其显示在定制的 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);
                }
            }
        }
    }
}
4

1 回答 1

5

问题与您管理数据的方式不一致有关。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 语句添加到您的代码中。

克里斯

于 2011-08-14T05:25:11.967 回答