Dopo circa due mesi di studio (notturno e frammentato) mi sono fatto una mia idea di WPF: potente e affascinante, ma pericoloso.
  Sulla potenza e sul fascino non mi soffermo, il web è pieno di info al riguardo.
  Sul fatto che sia pericoloso, faccio un semplice esempio, basato sull'interazione tra XAML e codice c#.
  L'uso promisquo di codice XAML e codice c#, oltre ad essere una necessità, è la pietra angolare della filosofia di progetto di WPF, che prevede la separazione tra i layer di presentazione e di logica (permettetemi questo obbrobrio, tanto avete tutti capito cosa intendo).
  Questa promisquità da una parte è un bene, perchè usando una programmazione dichiarativa, è possibile esprimere cosa si vuole ottenere, lasciando che il framework implementi il come si ottiene.
  Dall'altra è male, perchè abbiamo fatto tanto per avere sistemi di sviluppo che verifichino quanto più possibile a "compile time" la correttezza (almeno formale) dei nostri sorgenti, mentre con WPF si fa allegramente uso di valori testuali per utilizzare dal codice c# gli oggetti definiti in XAML.
  Un esempio semplicissimo, con una TextBox e un Button:
     
<Window x:Class="WpfApplication.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Esempio" Height="300" Width="300">
    <StackPanel>
        <TextBox Name="textBox1" Margin="5"/>
        <Button Click="Button_Click" Margin="5">Mostra il valore</Button>
    </StackPanel>
</Window>
 
  
private void Button_Click(object sender, RoutedEventArgs e)
{
  MessageBox.Show(this.FindName("textBox1").ToString());
}
 
Il risultato di questa complicatissima applicazione è a dir poco spettacolare:
 
Ora, se per qualsivoglia motivo cambiamo nel sorgente XAML il nome del TextBox, sostituendo "textBox1" con "pippo", abbiamo due effetti collaterali indesiderati:
  - L'ambiente di sviluppo (VS 2008), visto che sto cambiano un valore testuale, non prevede alcun avviso del tipo "cerca e sostituisci";
 
  - La compilazione fila liscia come l'olio.
 
Peccato che ora l'esecuzione del programma vada in crash.
 
Mi sa che tocca lavorare di brutto con i test, ma al momento non ho alcuna esperienza di TDD con WPF, perchè (come mio solito) ci ho solo giocato per capire cos'è.
E voi cosa ne pensate? Se interessa potremmo spostare la discussione sul forum.
Io, per non saper ne leggere ne scrivere (e ne sicuramente programmare), torno a WinForm.