Dafür kann ich dir ein paar Best Practices aus der Praxis nennen, die teilweise produktiv sind oder kurz vor der Fertigstellung - mit andern Worten: sie funktionieren nicht nur als Pattern ;-)
Die Frage, die du aber zuvor beantworten musst: Wie sehr willst du trennen?
a) Komplett:
- dynamisches Laden von Anwendungsmasken,
- lose Kopplung von Events über Namen
- XML Steuerdateien binden Logik und GUI zusammen
b) Klassisch
- dynamisches Laden von Modulen
- Module kommunizieren über Services mit Core und anderen Modulen
- lose Kopplung von GUI und Komponente durch Interfaces (sehr klassisch ;-) )
c) Design / Code
- XAML im Blend
- C# in VS
- Code Behind so dünn wie möglich
- zentrale Steuerung