Newsgroup: it.comp.lang.visual-basic
Titolo: MVVM *doppia*

Nel caso di un unico ViewModel non ho problemi
ma se ho un semplice progetto come questo:
 
Model1
Model2
 
ViewModel1
ViewModel2
 
View Comune
 
Il problema č agganciare la View (in pratica una semplice ListView) ai due 
ViewModel. Riesco solo se scrivo codice nella View per modificare il 
ViewModel agganciato al bisogno.
La domanda č: se e come č possibile fare tutto da xaml.
Grazie
 
Elisabetta. 
 
 

 Elisabetta.
 
.m
 
-- 
blog @ //
milestone.topics.it
 
 
 


Nel modulo di codice di App.cs ho
(ho commentato è il secondo VM per far capire
cosa vorrei; il db di prova è Northwind e non
vorrei utilizzare EntityFramework):
 
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            MainWindow  win = new MainWindow();
            CustomersViewModel _customersViewModel  = new 
CustomersViewModel();
            //EmployeesViewModel _employeesViewModel = new 
EmployeesViewModel();
            win.DataContext = _customersViewModel;
            //win.DataContext = _employeesViewModel;
            win.Show();
        }
 
Nello xaml ho:
       <ListView Name="myList" ItemsSource="{Binding Customers}" 
Margin="0,79,0,0">
            <ListView.View>
                <GridView x:Name="myGrid">
                    <GridViewColumn Header="CustomerID" 
DisplayMemberBinding="{Binding CustomerID}" Width="80"/>
ecc.
 
Tutto funziona a meraviglia.
Ora quello che vorrei sapere è se è possibile gestire il cambio
di VM da xaml anziche da codice. Cioè se è possibile non
avere codice nella windows che gestisce la ListView e il VM.
Da codice non ho problemi.
 
Spero si capisca cosa vorrei fare/sapere.
 
Grazie. Elisabetta. 
 
 

 avere codice nella windows che gestisce la ListView e il VM.
Ciao.
Sono incuriosito, dato che sto studiando anche io.
Se ho capito bene, vorresti cambiare origine dati, senza intervenire sul code behind, bensì agendo sulle proprietà dello xaml. Lo Xaml è un linguaggio di markup, pertanto non "programma", ma descrive. Essendo statico, con l'interazione di un altra tecnologia, puoi gestirlo dinamicamente, come avviene nell'HTML per mezzo del JS.
Mi rimarrebbe il dubbio sui trigger, che mi pareva (non ho approfondito) venissero definiti proprio un'innovazione nei linguaggi di markup.
Spero qualcuno ci dia lumi.
Perdonate l'intrusione e le mie probabili lacunosità.
 
F.

 avere codice nella windows che gestisce la ListView e il VM.
 
Come ti ha detto Fabrizio non c'è mezzo se non con qualche trucchetto 
usando ad esempio un behavior e/o una attached property.
Io personlamente sceglierei la strada di un ViewModel che fa da 
mediatore e decide che dati esporre.


 usando ad esempio un behavior e/o una attached property.
 
Con un "attached property" riesci ad attachare un codice?!
O non ho capito nulla, o non ci sono ancora arrivato.
Me lo faresti un cortese esempio Mauro?


 
Provo.
 
Grazie. Elisabetta 
 
 


 
Qui i sorgenti aggiornati:
http://radical.codeplex.com/SourceControl/changeset/view/77594#1476057
 


 
Grazie Mauro.


 
Alla fine ho risolto cos�:
 
- ho creato una classe statica dove ho messo la gestione della ListView 
(gestione che avviene tramite due commandbutton) in base al datacontext 
selezionato
- nel modulo App.xaml.cs ho messo la gestione del commandbinding per i 
commandbutton interessati
 
In questo modo non ho una riga di codice nella window che era l'obiettivo 
che mi ero prefissata
Tutto va a meraviglia e sono contenta cos�.
 
Ogni ulteriore suggerimento � sempre ben accetto.
 
Chiedo scusa se si tratta di c# e non di vb, sono stata ot, ma non sapevo 
dove postare.
 
Grazie. Elisabetta 
 
 

 Ogni ulteriore suggerimento è sempre ben accetto.
 
approfondisci che cosa è Model View ViewModel perchè quello che hai 
fatto tu è una versione molto spartana di MVVMe tanto vale capire quali 
sono le potenzialità che il pattern ti offre.



****************************
 
Me ne rendo conto.
La mia necessità quella di avere nella View
solo la descrizione della UI, lo xaml non
deve contenere il Binding.
Forse è improprio che l'abbia chiamato
io MVVM.
Tieni anche presente che il progetto
è molto piccolo e deve dare due
viste di due diverse tabelle di un db
SQL (ovviamente non il Northwind..;-))
 
Sempre grazie per i consigli.
 
Elisabetta.