Metro is brand new. I have to hope that, in the final release of Metro and Windows 8, there will be an “Update” method for ListViews. I may be wrong, though, because it’s possible that ListViews aren’t meant to update immediately. Metro is, above all else, a design philosophy, and Microsoft might very well mean to limit it in these small ways. I found a way around the limitation, albeit an ugly one, but maybe next time I won’t expect to be able to update the ListView. Maybe I’ll show the updated information in a better way, a more Metro-friendly way.
That’s what I feel Microsoft intends to achieve with Metro: a new wave of standardized, friendly applications. As users, we will be treated to thoughtfully-crafted interfaces where every tool and command is where we’d expect it to be. But, as developers, we will have to change how we think of UI design, and perhaps place more importance in it than before. The goal has always been to create user-friendly interfaces, but, with Metro, Microsoft is creating an opportunity for all developers to approach UIs in the same way.
Maybe we won’t have to worry about UIs at all anymore, at some point in the Metro future. Maybe UI design will become less of a challenge to design an easier interface, and more of a duty to stick with what we know the user will anticipate. If Microsoft succeeds in pushing it’s new design philosophy, maybe we can all expect the “File” menus and “CTRL-S” saves of the future to be swipes, and squares, and app bars.
Designing in Metro
Today I spent multiple hours trying to add some simple functionality to the Metro Blog Reader app I’ve been working on. I wanted a way to mark new blog posts as “unread”, a feature that was left out of the Microsoft tutorial I initially followed to build the app. I had already added other basic functionality, like adding and deleting new RSS feeds and the ability to save what feeds had been added. I thought that adding an “Unread” property to each blog post would be fairly straightforward.
I spent most of my time looking through multiple threads of discussion online, where one developer or another had encountered problems updating certain Metro UI elements (in this case, a ListView). Each thread had a different approach to the problem, and each thread ran into some kind of error. Often, Metro just refused to acknowledge any changes to the data that was initially loaded into the ListView – in my case, we’re talking about changing a blog post from being “unread” to “read”.
In the end, I found my own solution to the problem: I called a method, “Move”, that was meant to be used when you wanted to change the position of an element in a ListView. I called “Move” whenever an element in a ListView was selected, since this obviously meant that the given blog post should be marked as “read”. Most importantly, though, I didn’t actually “Move” the blog post’s position at all. Instead, I asked the blog post to “Move” back into the same position. This only accomplished one thing: it forced the ListView to refresh, thus immediately reflecting any changes to is data.
To be fair, it also causes a small transition animation to play.