Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ViewModel injection u View bez code-behinda, view first

[es] :: .NET :: WPF Programiranje :: ViewModel injection u View bez code-behinda, view first

[ Pregleda: 2692 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon ViewModel injection u View bez code-behinda, view first04.10.2011. u 18:49 - pre 151 meseci
ok, znam da view model moze biti postavljen u konstruktoru:

Code (csharp):

    public partial class LossCurvesView : UserControl
    {
        public LossCurvesView(LossCurvesViewModel viewModel)
        {
            InitializeComponent();
            this.Loaded += (a, e) => { this.DataContext = viewModel; };
        }
    }
 



ali ne svidja mi se preterano ovaj pristup, em sto gubim design time binding nego jos i koristim code-behind nakon sve price o separacija murkupa od koda. Hteo bih da viewmodel injectujem nekako drugacije, kao npr kroz xaml :

Code (xml):
<UserControl ... xmlns:vmodel="clr-namespace:Risk.ViewModels.Curves"
   <UserControl.DataContext>
        <vmodel:LossCurvesViewModel />
    </UserControl.DataContext>
    ...


problem je sto ovo zahteva da viewmodel ima parameterless konstruktor sto je problem kada (a to je skoro uvek) view model ima dependencies. Tehnicki mogao bih dependencies da prebacim da budu attributed [Dependency] propertiji (iako iz nekog razloga komuna anatemise taj non-constructor pristup), medjutim problem je sto instancijaciju ViewModela vise ne radi Unity container vec radi xaml engine koji ne radi dependency injection.

Dakle, postoji li view-first metod za instancijaciju viewmodela bez uplitanja code-behinda? Blend i VS designer nekako mogu i da prevarim sa d:DesignSource/d:DataContext ali bih stavrno hteo da eliminisem code-behind bez da izgubim view-first.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

logic_rabbit
Radenko Zec
banjaluka

Član broj: 74458
Poruke: 271
80.87.240.*



+1 Profil

icon Re: ViewModel injection u View bez code-behinda, view first05.10.2011. u 06:40 - pre 151 meseci
Vecina MVVM framework-a to ima rijeseno koristeci neku varijantu ViewModel locatora ili nesto slicno.
Baci oko na ovaj clanak :
http://johnpapa.net/simple-viewmodel-locator-for-mvvm-the-patients-have-left-the-asylum

On u primjeru koristi MEF a ti zamjeni sa Unity-ijem i to bi trebalo biti to...
logic_rabbit (MCAD,MCSD,MCT,MCTS-
Windows development,MCPD)
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: ViewModel injection u View bez code-behinda, view first05.10.2011. u 08:36 - pre 151 meseci
Nisam video nista slicno u Prismu, mada nesto mi je sumnjivo i u ovom primeru jer sam razmisljao duz te linije, nesto na fazon

Code (xml):
DataContext="{Binding  Source={StaticResource ViewModelLocator}, Path=IdenitifkacijaVModela}"


Ali tu ima nekih problema. Prvo, sta je sa design time podrskom? Path mora da se binduje na object sto automatski ubija design-time tooling usled nedostatka metadata.
Drugo, za Unity psotoji problem sto Unity nema singleton container, kad resolvujes kroz container on moze sebe da mapira kroz resolved objekte u IUnityContainer/IServiceLocator ali isntancijacij iz XAMLa ne pocinje i specificnog kontejnera niti ViewModelLocator moze da zna koji kontejner da koristi. Jedini nacin je da staticki inicijalizujes ViewModelLocator kri kreiranju kontejnera?
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

logic_rabbit
Radenko Zec
banjaluka

Član broj: 74458
Poruke: 271
*.teol.net.



+1 Profil

icon Re: ViewModel injection u View bez code-behinda, view first05.10.2011. u 18:47 - pre 151 meseci
To je i jedan od razloga zasto vise ne koristim Unity. Prije sam ga wrappavao u singleton kontejner...
Sto se tice design time podrske, nemam pojma. Mozda da pogledas u npr. MVVM Light on to ima rijeseno na slican nacin, a sigurno ima design time podrsku...



logic_rabbit (MCAD,MCSD,MCT,MCTS-
Windows development,MCPD)
 
Odgovor na temu

[es] :: .NET :: WPF Programiranje :: ViewModel injection u View bez code-behinda, view first

[ Pregleda: 2692 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.