[ jovanpavlovic777 @ 16.11.2016. 10:19 ] @
U Wpf aplikaciji koju pisem trebam na klik na item u ItemsControl da prikazem prozor koji ce sadrzati podatke iz toga itema (DataContext novoga prozora treba da bude taj kliknut item).

Nasao sam i shvatio nacin kako da u Prism/Mvvm/Mef to uradim sa jednim prozorom, preko InteractionRequestTrigger u View-u i InteractionRequest/DelegateCommand-e u ViewModelu.

Ali to mogu samo sa jednim, staticnim prozorom.

Kako da svaki put kreiram novi prozor klikom na item u ItemsControl, to nisam uspeo da shvatim nikako - ili negde pogresno shvatam sve, jer sam nov u Prism i Mvvm svetu i jos uvek razmisljam na stari nacin.
[ mmix @ 16.11.2016. 11:25 ] @
InteractionRequests nije predvidjen za to sto ti hoces, to je (kao sto mu ime kaze) fancy way za prikaz modalnih inputa i slicnog.

Ono sto tebi treba je multi-shell aplikacija sa razlicitim region managerima, i to je moguce isto.
Pogledaj ovde: How to do multiple shells in my Prism app?
[ jovanpavlovic777 @ 17.11.2016. 08:41 ] @
Hvala na pomoci i predlogu.
Pokusao sam juce absorbujem ceo koncept iza Multiple Shells u Prism-u, citao sam na vise mesta i pogledao sam i video od Briana Lagunasa na tu temu.
Mislim da sam ovaj deo sa novim IRegionManager shvatio (da se ne bi koristio globalni, ili injectovan od strane Mef-a), i da se posle toga kreira novi instanca za novi shell sa regionManager.CreateRegionManager()...
Pravo da kazem, moguce je da jos uvek pogresno radim jer jos uvek pokusavam da shvatim sve koncepte i platformu ...

Koliko mogu da shvatim Multiple Shells u Prism-u bi trebalo da se koristi u situaciji kada zelim isti Shell (sa istim layoutom i regionima u njemu) kao novu instancu u novom prozoru?

Ne znam da li sam bio jasan u postavci pitanja, meni za aplikaciju na kojoj radim ne treba nova instanca identicnog glavnog Shell-a (glavni Window aplikacije) - vec potpuno novi prozor, sa drugacijim layoutom, sa svojim regionima i user controlama.

U tom novom Window-u cu naprimer koristiti AvalonDock dok u glavnom prozoru (Shellu) necu koristiti.

Pre Prisma i Mvvm-a, ranije to sam ovako (staticki) resavao na sledeci nacin:

Code:
    
private static List<Window> AllAppWindows = new List<Window>();

private static void OpenWindow(Window wnd, string desiredName)
{
    Window mywindow = AllAppWindows.SingleOrDefault(x => x.Name == desiredName);
    if (mywindow == null)
    {
        mywindow = wnd;
        AllAppWindows.Add(mywindow);
    }
    mywindow .Show();
}


Edit: napravio sam samo malu izmenu u source-u metoda da objasnim sta zelim da postignem.

[Ovu poruku je menjao jovanpavlovic777 dana 17.11.2016. u 09:53 GMT+1]
[ mmix @ 17.11.2016. 16:48 ] @
Da, razumeo sam, zato ti i treba novi RegionManager jer su imena view-a unutar jednog region menadzera jedinstveni a ti hoces vise prozora sa istim rasporedom, zato svaki od tih novih prozora mora da ima novi region manager. Onda mozes da koristis iste Views u svim prozorima tog tipa.

Ovo je malo advanced Prism tehnika, treba prvo da budes bas dobro verziran sa Dependency Injection konceptom i onda sa Prismom i njegovom arhitekturom (Shell/RegionManager/Region/View) i interkonekcijom.
MEF je vrlo lako uputiti da ti svaki put eksportuje novu instancu koristeci PartCreationPolicy(CreationPolicy.NonShared) atribut. U prismu vise neces drzati listu prozora vec ces emitovati prozore i u njima koristiti neki eventing mehanizam, npr EventAggregator da komuniciras sa svim ili pojedinacnim prozorima (npr ako se aplikacija gasi, treba da ih obavestis da se zatvore, itd.)