Pulsante C # Fare clic su Eventi attivati ??dopo il comando
Domanda
Sto riscontrando problemi nel tentativo di far scattare un evento click dopo l'esecuzione del comando. Sto cercando di seguire lo stile di sviluppo MVVM.
Ecco lo scenario:
Nella mia applicazione ho una griglia di 2 per pulsanti N, dove N è un set di pulsanti caricato dinamicamente (a volte sarà 2 x 2, a volte è 5 x 9, non lo so). Inizialmente, tutte le colonne di pulsanti saranno nascoste tranne la prima colonna. Facendo clic sulla prima colonna, viene eseguito un comando e viene riprodotta una dissolvenza nell'animazione che mostra alcuni pulsanti della seconda colonna, a seconda del pulsante selezionato nella prima colonna. Ad esempio, facendo clic sul pulsante in alto nella prima colonna verranno visualizzati i primi quattro pulsanti nella seconda colonna, mentre il pulsante in basso nella prima colonna mostrerà i primi tre pulsanti nella seconda colonna.
Ecco il problema:
Per ogni pulsante, ho impostato un CommandParameter su ciascuno dei pulsanti nella prima colonna. Quando il comando viene eseguito, i dati vengono elaborati e nella VM viene impostata una proprietà che dice quale pulsante è stato premuto (utilizzo nuovamente CommandParameter). Mentre i dati vengono elaborati, voglio mostrare all'utente il prossimo set di pulsanti. Ho un evento click che prende CommandParameter dalla VM e riproduce un'animazione per mostrare i pulsanti corretti.
Tuttavia, il problema è che a WPF piace fare l'evento Click prima che il comando venga attivato. Questo è un problema poiché la proprietà nella VM che dice quale pulsante è stato cliccato non viene impostata!
Quindi questo mi porta a un paio di domande ...
1) Esiste un modo per eseguire il comando prima di lanciare l'evento?
2) Lo sto facendo bene? : P
Soluzione
Invece di utilizzare un gestore eventi click, puoi semplicemente impostare DataTriggers sui tuoi pulsanti.
Potrebbero rispondere alla proprietà nel ViewModel, nascondendo i pulsanti che non si desidera visualizzare e mostrando il pulsante che si fa.
La cosa bella di questo è che la tua vista può essere eseguita completamente in XAML e ViewModel sta solo impostando lo stato (cioè: sono in questo stato) e la vista rimarrà automaticamente aggiornata poiché l'associazione causerà il nuovo DataTrigger al fuoco.