The application is now composed of three screens, main one (choose categories):
Select a post in a category:
And view the posts in a category:
Notice that you can page between the posts, this enables a very quick browsing experiance.
I commited the changes to the Rhino Tools repository (here), so you can see how I did it (not very complex). That data arrives from a sqlite database called ayende.blog using Active Record, of course.
Additional features that I want to add:
- Add search capabilities, so I would be able to search the content / titles. Probably using SQLite full text searches. Allow to view the page results and to page through them.
- Add tagging support, allow to browse the tags and page through tagged posts.
Not a lot of feature, eh?
Except that I have this list of things that I want to fix:
Give a uniform UI for the buttons in the first two screens, probaly on par with the prev/next links on the last screen.
Figure out control templates and replace the links on the last screen with a real control (right now it is a TextBlock with an event on MouseDown).
- Figure out how to factor the common header into a seperate header control.
- Add a column with the number of posts in each category.
- Use WPF Commands instead of doing things in the events.
Figure out a better way to do paging than just moving between all those pages.There are advantages to this approach, so I think that I will keep them.
Put a meaningful title on the page, so the back button menu will look nice.
- Put a Home button on the titlebar that will get you back to the main screen.
Figure out if an a really long chain of pages is a memory leak in the order that I should do something about.Yes, it is a memory leak, probably need to use KeepAlive=false, in which case the page will be discarded, and a new instance will be used when stepping back to it. As this is the default behavior, no need to do anything about it.
Figure out if triggers can replace the checks for next item, prev item.There isn't a way to do this properly, because there is an if pos+1 == count invovled.