将通过xml恢复的数据绑定到堆栈面板的简单方法

时间:2011-07-28 18:57:16

标签: xml silverlight data-binding webclient stackpanel

我对Silverlight很新,但我确实掌握了它。我的问题是如何获取我通过Webclient下载的XML,并将其放入自定义控件中?例如,XML包含标题,图像,描述,pubdate等的数据,然后在画布中我放置文本块来保存XML中的数据。为了进一步提出我的问题,如何制作画布的副本并将其放入每个包含其适当数据的堆栈面板中?我的xml编码如此。

<?xml version="1.0" encoding="us-ascii"?>
  <UGR>
   <item>
      <title>Sample 1</title>
   </item>
   <item>
<title>Sample 2</title>
  </item>
   <item>
<title>Sample 3</title>
   </item>
  <item>
<title>Sample 4</title>
  </item>

至于我的.cs中的这一点,我有

public Home()
{
    InitializeComponent();

    WebClient UGRload = new WebClient();
    UGRload.DownloadStringCompleted += new DownloadStringCompletedEventHandler(UGRload_DownloadStringCompleted);
    UGRload.DownloadStringAsync(new Uri("UGR.xml"));     
}    

private void UGRload_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    if (e.Error != null)
    { 
      XDocument xmlSource = XDocument.Parse(e.Result);

            var news = from ugrItem in xmlSource.Descendants("item")

                       select new NewsItemSetup
                       {
                           Title = (string)ugrItem.Element("title").Value,
                       };


            newsview.ItemsSource = news;
    }   
}    

至于我想把从xml收到的数据放在哪里,这里是我创建画布的地方。

<Grid x:Name="LayoutRoot">
     <ListBox Canvas.Left="116" Canvas.Top="8" Height="464" x:Name="newsview" Width="518" Foreground="White">

            <ListBox.ItemTemplate>
                <DataTemplate>

                    <StackPanel Orientation="Horizontal">

                        <TextBlock Text="{Binding Title}" Margin="5" Foreground="White"/>


                    </StackPanel>

                </DataTemplate>
            </ListBox.ItemTemplate>

        </ListBox>
    </Canvas>
</Grid>

文本块是否必须是数据绑定,然后将整个画布转换为用户控件,以便将xml数据编码到相应的文本块?任何帮助或建议都会很棒,谢谢。

1 个答案:

答案 0 :(得分:0)

您应该使用某种类型的ItemsControl来显示绑定集合中的每个元素。 ListBox(派生自ItemControl)似乎是这样的东西的流行选择(我更喜欢使用原始的ItemsControl - 但它取决于ListBoxey我的UI的方式)。在ItemsControl / ListBox的ItemTemplate中定义“NewsItem”XAML。

对于ItemsControl绑定的ItemsSource属性中的每个集合元素(您的XML节点),您将获得ItemTemplate的XAML的新副本。它将DataContext设置为集合中的项目 - 准备绑定。这些项目是根据为ItemsControl定义的任何Panel(可配置)进行排列的。

阅读this。 (既然你说你是SL的新手,我建议你从一开始就阅读整篇博文)