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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top