I'm currently making an application that has shared code on the backend. As presentation layers I'm using WinForms, Cocoa (MonoMac) and GTK# (Linux).
I'm looking for a way to describe my user interface in an abstract way, so that the concrete UI implementations (Cocoa, WinForms, GTK#) only need to worry about displaying and drawing.
This so I can - wire up events (button clicks, data input) from the concrete views and bind them to a function in the controller/or the abstract view handler..? - let the controller/abstract view/model update the view..?
So basically i'm trying to get a kind of IView, IController and IModel setup going.. or Model-View-Presenter, or MVVM, are there any example applications out there...? Because there's a lot of theory, but no concrete examples.
EDIT January 2017: "Electron"
For those wanting to make cross platform applications for desktop both on LINUX / WINDOWS and MAC I'd suggest also looking into Electron (electron.atom.io). It's basically Chromium+NodeJS - which means UI design for one browser with the power of Node (and npm packages). You can also hook .NET code via EdgeJS.