A mini-app for retrieving RSS feeds and viewing articles, showing MVVM and design best practices. Users can specify the URL of a feed, view articles in a WebView control, and save favorite articles to local storage. This sample runs on the Universal Windows Platform (UWP) and WinUI 2.4.
Note - This sample is targeted and tested for Windows 10, version 2004 (10.0; Build 19041), and Visual Studio 2019. If you prefer, you can use project properties to retarget the project(s) to Windows 10, version 1903 (10.0; Build 18362).
Note: Features in this app are subject to change.
- The navigation menu (hamburger menu) pattern and screen-width adaptivity using the SplitView control and the AdaptiveTrigger class.
- The Syndication APIs (Windows.Web.Syndication) to retrieve RSS feed data.
- The DataContractSerializer class to save and restore app data from local storage.
- C# and XAML using the MVVM design pattern.
June 2020 update
This update includes:
- Refactoring for WinUI 2.4 controls, specifically ProgressBar.
September 2016 update
This update includes:
- General cleanup, commenting, and refactoring for clarity.
- Improved error handling and performance.
- Fixes for several bugs related to layout, navigation, browser launch, and URL handling.
March 2016 update
This update includes:
- A complete redesign of the UI to show effective use of color, type, images, and animated effects.
- Major improvements to layout, navigation, and window-size adaptivity to support small and large screens.
- Use of the WebView control to show articles within the app.
- The ability to rename feeds and to rearrange feeds and favorites.
We implemented the navigation and layout patterns in this sample using code from the XAML navigation menu and XAML master/detail samples in the Windows-universal-samples repo. These samples represent the current minimum recommendations for these patterns, and the RssReader sample will continue to reflect this guidance in future updates.
Please report any bugs or suggestions on the Issues list. All feedback is welcome!
Code at a glance
If you're just interested in code snippets for certain API and don't want to browse or run the full sample, check out the following files for examples of some highlighted features:
- FeedView.xaml, AddFeedView.xaml,
EditFeedsView.xaml, and Styles.xaml
- Rich UI experiences and XAML resources for colors, templates, and animated effects.
- AppShell.xaml and AppShell.xaml.cs
- Adapted from the XAML navigation menu sample.
- Use of the SplitView control to implement a navigation menu with a hamburger button.
- Use of AdaptiveTrigger with VisualState.Setters and VisualStateManager to adjust the navigation menu depending on the current window width.
- Code that adjusts header margins depending on the state of the navigation menu and hamburger button.
- Keyboard support and Frame navigation.
- MasterDetailPage.xaml, MasterDetailPage.xaml.cs, DetailPage.xaml and DetailPage.xaml.cs
- FeedDataSource.cs and Serializer.cs
- Loading default feed data from the app package using StorageFile.GetFileFromApplicationUriAsync.
- Loading feed and article data from an RSS server using SyndicationClient.RetrieveFeedAsync.
- Loading and saving feed and favorites data to/from local storage using StorageFolder.TryGetItemAsync, StorageFolder.CreateFileAsync, and DataContractSerializer.
Universal Windows Platform development
- Windows 10. Minimum: Windows 10, version 1809 (10.0; Build 17763), also known as the Windows 10 October 2018 Update.
- Windows 10 SDK. Minimum: Windows SDK version 10.0.17763.0 (Windows 10, version 1809).
- Visual Studio 2019 (or Visual Studio 2017). You can use the free Visual Studio Community Edition to build and run Windows Universal Platform (UWP) apps.
To get the latest updates to Windows and the development tools, and to help shape their development, join the Windows Insider Program.
Running the sample
The default project is RssReader and you can Start Debugging (F5) or Start Without Debugging (Ctrl+F5) to try it out. The app will run in the emulator or on physical devices.
Note: This sample assumes you have an internet connection. Also, the platform target currently defaults to ARM, so be sure to change that to x64 or x86 if you want to test on a non-ARM device.