my.ASPItalia.com
ASP.NET
|
HTML5
|
LINQ e Entity Framework
|
Silverlight
|
Windows Phone
|
.NET Framework
|
Libro WP7
|
Libro HTML5
|
Corso on-site HTML5
Iscriviti
Login
Newsletter
Home
Articoli
Script
Notizie
FORUM
Blogs
Lab
Media
Tutorials
Corsi
Libri
Tags
Tutti i forum
Ricerca
FAQ
Fai una domanda
Comunicazione tra ViewModels
in
.NET Framework
>
Windows Presentation Foundation e WinForms
Ultimo messaggio
andypat
il 19 febbraio 2010 alle 14:10
16 messaggi
dal 30 maggio 2007
Salve, dopo un gratificante periodo d'uso di MVVM, mi sono dovuto scontrare con il problema della comunicazione tra viewmodel ed ho così pensato di utilizzare un mediator (perchè facile da utilizzare).
Per semplificare ho una struttura di questo tipo:
ContainerViewModel contiene ViewModels1 e ViewModels2; a loro volta ViewModels1 contiene una ObservableCollection di ViewModel1 e ViewModels2 una ObservableCollection di ViewModel2. ViewModel1 espone le proprietà bindabili Id, Model2Id, Description ecc, ViewModel2 espone le proprietà bindabili Id, Description.
Attraverso l'uso di template, nella view i contenitori sono ListBox e gli item stackpanel con textbox per la visualizzazione e l'editing tramite binding.
Dalla listbox che rappresenta ViewModels1, selezionando il valore Model2Id dell' item corrente devo far comparire la listbox ViewModels2 e, selezionando un item visualizzo nuovamente ViewModels1 con il valore Model2Id aggiornato.
Per far questo utilizzo un mediator condiviso tra i vari view model ma il codice è diventato estremamente complesso e difficile da mantenere (anche perchè mi sembra di richiedere al modelview di sobbarcarsi il compito che dovrebbe essere della view). Vorrei pertanto chiedere un qualche consiglio su come semplificare la comunicazione tra i vari view model.
Se serve posso postare un pò di codice di esempio
Rispondi
Quoting
Ricciolo
il 22 febbraio 2010 alle 13:29
5.514 messaggi
dal 26 febbraio 2001
Contributi
blogs.aspitalia.com
|
Blog
Credo che il problema risieda solo nel fatto che uso l'id e non direttamente un riferimento all'istanza del ViewModels2.
Se fai così non ti serve neanche il mediator dato che nella view puoi mettere in Binding la proprietà ViewModels2 del ViewModels1 attualmente selezionato. Il binding infatti permette di entrare in proprietà multi livello dell'elemento selezionato (occhio a IsSynchronizedWithCurrentItem)
Ciao
Il mio blog
Homepage
Rispondi
Quoting
andypat
il 22 febbraio 2010 alle 18:09
16 messaggi
dal 30 maggio 2007
Prima di tutto ti ringrazio per la risposta. In effetti avevo pensato ad un approccio di questo tipo, ma mi sono scontrato con il problema che i vari view models non si conoscono e non conoscono il view model contenitore. Attualmente sono messo in questo modo
ContainerViewModel
(
Mediator mediator = new Mediator();
MyModel model = new MyModel();
private ViewModelsData1 data1 = New ViewModelsData1(mediator, model.Data1);
private ViewModelsData2 data2 = New ViewModelsData2(mediator, model.Data2);
private ViewModelsData3 data3 = New ViewModelsData3(mediator, model.Data3);
private ViewModelsData4 data4 = New ViewModelsData4(mediator, model.Data4);
private ViewModelsData5 data5 = New ViewModelsData5(mediator, model.Data5);
private ViewModelsData6 data6 = New ViewModelsData6(mediator, model.Data6);
.... //Altra roba
}
e nello xaml un tabcontrol (o un contentcontrol) che contiene le view (visualizzate come listbox) dei vari view models. Quando seleziono un item di uno di questi view model, entro in editing e posso modificare i valori (tramite binding). Alcuni di questi valori però sono id di item di altri view models (un pò come in un database) e, in questo caso, devo passare alla rispettiva view, selezionare l'item che voglio referenziare, e passare nuovamente alla view precedente. Come posso aggiornare la view del container da un view model senza un mediatore con il quale informare il contenitore che deve passare ad un' altra view? Avevo pensato di creare un'altra view per ogni tipo di view model solo per la selezione dei vari item da referenziare e visualizzarla magari come popup dal container, ma avrei dovuto scrivere molto codice in più per cose che il container in realtà già aveva (e solo per la view). Tra l'altro non riesco ad utilizzare un approccio tipo MVVM light (con un ViewModelLocator statico che mi permetta di passare da un model all'altro) perchè MyModel in realtà è un dispositivo connesso via usb, quindi posso avere da 0 a n ContainerViewModel
Modificato da andypat
il 22 febbraio 2010 18.13 -
Rispondi
Quoting
Salto rapido
Ultimi messaggi
Tutti i forum
Ricerca
Utenti online
ASP.NET
ASP.NET 2.0
ASP.NET 3.5
ASP.NET 4.0
.NET Framework
Silverlight
Windows Phone
Windows Presentation Foundation e WinForms
Windows Communication e Workflow
ASP - avanzato
ASP - base
SQL Server e MySQL
Libri
Hosting
Altri linguaggi e tecnologie
Windows Server, IIS & Security
E-commerce
OT
Commenti: blogs e notizie
Eventi
Torna al forum
| Feed
RSS
ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
In primo piano
Speciale web mobile: costruire applicazioni con ASP.NET, jQuery Mobile e PhoneGap
Speciale Silverlight 5: tutte le novità
Rilasciato il bollettino MS11-100 per risolvere i problemi di attacchi DoS di ASP.NET
I più letti di oggi
Windows Phone 7.5 Developer Day: marketplace e strumenti per monetizzare le app
Le funzionalità di drag and drop di Silverlight 4.0
Mobile Web con ASP.NET: Web Forms e MVC nel palmo di una mano (Real Code Day 6)
.NET Campus: Creare applicazioni veloci e user-friendly con jQuery, Microsoft AJAX Library e ASP.NET
Introduzione a LINQ, LINQ to XML, Object e DataSet
Visualizzare un template per browser mobile tramite un custom control ASP.NET
Speciale web mobile: costruire applicazioni con ASP.NET, jQuery Mobile e PhoneGap
Media
Windows Phone 7.5 Developer Day: marketplace e strumenti per monetizzare le app
Windows Phone 7.5 Developer Day: costruire app con Visual Studio 2010 e Windows Phone Runtime
Tutti i media
In evidenza
Speciale web mobile: costruire applicazioni con ASP.NET, jQuery Mobile e PhoneGap
Speciale Silverlight 5: tutte le novità
Sviluppare applicazioni per Windows Phone: scopri come fare con il nostro nuovissimo libro!
Sviluppa le applicazioni del futuro oggi: impara con il nostro libro HTML5 Espresso!
Community Days 2012 - Milano
Visualizzare un template per browser mobile tramite un custom control ASP.NET
Windows 8 su ARM: avrà il desktop, Office e il connected standby
Rilasciato Entity Framework 4.3
MISC
I nostri autori
Collabora con noi!
Media Kit - Pubblicità sul nostro network