2010-05-28 11 views
13

Sto costruendo un'applicazione WPF utilizzando il pattern MVVM (entrambe sono nuove tecnologie per me). Uso i controlli utente per semplici bit di funzionalità riutilizzabili che non contengono logica aziendale e pattern MVVM per creare la logica dell'applicazione. Supponiamo che una vista contenga il mio controllo utente che attiva gli eventi e voglio aggiungere un gestore di eventi a quell'evento. Quel gestore di eventi dovrebbe essere nel modello di vista della vista, perché contiene la logica di business. La domanda è: vista e il modello di vista sono collegati solo da binding; come posso collegare un gestore di eventi usando l'associazione? È persino possibile (non sospetto)? In caso negativo, come devo gestire gli eventi da un controllo nel modello di visualizzazione? Forse dovrei usare i comandi o INotifyPropertyChanged?WPF - Gestione degli eventi dal controllo utente in Visualizza modello

risposta

11

In generale, è buona norma MVVM evitare codice nel codice, come sarebbe il caso se si utilizzano eventi nei controlli utente. Quindi, quando possibile, utilizzare INotifyPropertyChanged e ICommand.

Detto questo, a seconda del progetto e di quanto sia pragmatico, alcune volte ha più senso utilizzare il codice del controllo.

ho a alcune occasioni usato qualcosa di simile:

private void textBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e) 
{ 
    MyViewModel vm = this.DataContext as MyViewModel; 
    vm.MethodToExecute(...); 
} 

Si potrebbe anche considerare Attached Command Behaviour, maggiori informazioni su questo e le implementazioni di trovare qui:

Firing a double click event from a WPF ListView item using MVVM

+0

di controllo dovrebbe essere riutilizzabili, in modo che il codice non lo farà - è lega il controllo a un modello di vista specifico. Comandi ... Probabilmente no - sono più utili per le azioni dell'utente. InotifyPropertyChanged allora? Grazie :) – Vitaly

+0

Difficile dire per me senza conoscere più specifiche. Ma ho aggiunto alcuni collegamenti alle informazioni correlate – ThomasAndersson

+0

@Vitaly se si è preoccupati di legare la vista al ViewModel esplicito, si potrebbe avvolgere ViewModel in un'interfaccia. Analizzerei i Comandi di Comando Allegati che stanno diventando la pratica accettata. Inoltre, controlla MVVMLight o Caliburn come framework per assistere nel tuo lavoro MVVM, ti renderà la vita molto più facile. – Agies

Problemi correlati