Newsgroup: it.comp.dotnet
Titolo: WPF: intercettare eventi/comandi

Ciao a tutti,
 
ho una app WPF formata da più tab all'interno di una stessa shell, con 
eventualmente qualche finestra di pop-up. Cercando di minimizzare il 
codice da scrivere (in particolare tutto ciò che è boilerplate) tutti 
gli eventi della tab (chiusura, perdita/acquisizione di focus, ecc.) più 
altri sollevati dall'interno delle tab (pressione di bottoni, ecc.) 
siano gestiti a livello della shell.
 
E' possibile?
Dove devo iniziare a documentarmi?
 
Grazie e buona giornata/settimana,
Giulio
 
-- 
 


Ciao,
lo scenario che descrivi si presta molto di più ad essere sviluppato 
con MVVM piuttosto che con la gestione eventi.
 
Tanto per darti un'idea, ogni volta che vuoi un contesto di backend 
differente (cioè un ViewModel che si occupi di una parte di user 
interface) è sufficiente che quella gerarchia di UI abbia il suo 
DataContext impostato sul corrispondente ViewModel.
Nel tuo esempio avresti:
- shell bindata al ViewModel della shell
- tab (uno o più) bindati al/ai ViewModel dei tab
- tutti i viewmodel comunicano via mediator pattern la cui 
implementazione di solito è "affogata" nell'implementazione di MVVM che 
scegli.
 
Un buon kit è MVVM light che offre molto di più di quanto ti serve in 
questo scenario.
 
Se invece vuoi andare con gli eventi ovviamente dovrai gestirti tutto 
nei code-behind e redirigere le richieste su tue classi per 
omogenenizzre le richieste, ma è decisamente più complesso.
 
-- 
Raffaele Rialdi  
http://www.iamraf.net
 
Weblog: 
http://blogs.ugidotnet.org/raffaele
 
Microsoft MVP profile 
https://mvp.support.microsoft.com/profile/raffaele
 
UGIdotNET - 
http://www.ugidotnet.org/
 
 
 

 omogenenizzre le richieste, ma è decisamente più complesso.
 
Già... quindi questa soluzione la scartiamo senza neanche un po' di 
rimorso. :-)
 
Grazie,
Giulio
 
-- 
 
 

 Suggerimenti?
[cut]
 
UPDATE:
 
<Button Command="{Binding DataContext.CloseCommand,
	RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"
	CommandParameter="{Binding}">
	...
</Button>
 
:-P
 
Ciao,
Giulio
 
-- 
 
 
 

 mano?
 
dipende dalle feature che vuoi, non è che ci sia poi molto li dietro. 
Guardati il MessageBroker di Radical è abbastanza semplice.
 
.m
 
-- 
blog @ //
milestone.topics.it
 
 
 

 </Button>
 
sarebbe molto più sensato che la "SelectedTab" sia in binding con il 
ViewModel anch'essa. Nel senso che deduco ti interessi poco sapere 
quale sia effettivamente il TabItem selezionato ma piuttosto quale sia 
il ViewModel dietro il TabItem selezionato.


 Guardati il MessageBroker di Radical è abbastanza semplice.
 
Ovvio!
Ormai Radical (per quanto mi riguarda) è *IL* framework, non si può 
prescindere!
L'unica cosa che non capivo era se Raf alludesse a una qualche 
implementazione idiomatica del mediator, ma a questo punto credo di no. :-)
 
Ciao,
Giulio
 
-- 
 
 
 

 ViewModel dietro il TabItem selezionato.
 
Con lo snippet di codice che ho postato, riesco a far passare il 
viewmodel "incriminato" come argomento della .Execute() del comando di 
chiusura. Per quanto riguarda quello che scrivi, lo aggiungerò. Però 
devo considerare anche il caso in cui venga chiusa una tab non selezionata.
Vediamo come va a finire, poi vi faccio sapere.
Nel frattempo: grazie.
:-)
 
Ciao,
Giulio
 
-- 
 
 

 prescindere!
 
:-)



 
Ho visto che hai già risolto e sei già sulla strada buona.
Concordo con Mauro che è meglio che il selectedtab sia segnalato al 
viewmodel.
 
buon lavoro...
