O'Reilly logo

Data-Driven Services with Silverlight 2 by John Papa

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Aggregating Feeds

Using the SyndicationFeed class, you can read and mash together both Atom and RSS feeds to create an aggregated list of feed items. The previous example showed how to consume a single feed and bind it to a ListBox control. The next example shows how to add and remove feeds from an aggregated list, and mash their feed items together into a list that you can bind to a list-based control.

Figure 10-7 shows the Aggregator Silverlight control from the sample code for this chapter. When the user enters a feed’s URL in the TextBox and clicks the Add button, if the feed is valid and does not already exist in the Aggregator control, it is added to a private field, _feeds, of type ObservableCollection<SyndicationFeed>. When you use an ObservableCollection<SyndicationFeed>, every time a new feed is added or a feed is removed from the _feeds class field, the ObservableCollection notifies the bound target controls that something in the list has changed. This makes it easy to add and remove items without having to rebind the list to the ListBox. The name of each feed is displayed in the upper ListBox, as shown in Figure 10-7.

When a feed address is entered the code uses the WebClient class to request the contents of the feed. When the asynchronous call to get the feed contents returns, the ReadFeed event handler processes the feed, as shown in Example 10-12. The feed is read into a SyndicationFeed object instance and then a check is made to see whether the feed already exists ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required