我正在尝试使用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);
}
}
}
}
}
答案 0 :(得分: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语句。
HTH!
克里斯