Caliburn.Micro - көрініс көрінсе, бірдеңе істеу

Қазіргі уақытта wpf және Caliburn.Micro-ға кіріп жатырмын, қазір MEF немесе Autofac сияқты нәрселер жоқ.

Қазір көру коды көрініс пайда болғаннан кейін тікелей қарауға тырысамын.

Байланыстырылған оқулықта бұл код көрініс көрсетілгенге дейін хабар терезесін көрсетеді:

protected override void OnActivate() 
{   
    MessageBox.Show("Page Two Activated"); //Don't do this in a real VM.   
    base.OnActivate();   
}  

Г - н Ейсенберг бұл туралы жазады:

Есіңізде болсын, сізде активтендіру логикасына байланысты   қазірдің өзінде жүктелетін көрініс, Screen.OnViewLoaded мәнін ауыстыруға тиіссіз   орнына/OnActivate бірге.

Менде мыналар бар:

protected override void OnViewLoaded(object view)
{
    base.OnViewLoaded(view);
    MessageBox.Show("OnPageTwoViewLoaded");
}

Мен сондай-ақ оны Grid EventTrigger және cal: ActionMessage арқылы көрдім. Бірақ барлық үш жағдайда MessageBox көрініс көрінбестен пайда болады.

Әрине, мен бірдеңені жоғалтып аламын, не істеп жатырмын?

5
@EtherDragon, демек, СМ қалай болғанда VIEW? Оларды іске қосу кезінде олардың бәрі беделді ме?
қосылды автор JobaDiniz, көзі
C.M экранда көргенге дейін көрініс даналарын жасайды. (Яғни, C.M бұл ленив емес жүктейді). Сондықтан OnViewLoaded коды көріністі көрмес бұрын іске қосылады. OnActivate OnViewLoaded емес, дұрыс орын деп ойлаймын. Сіз бұл мінез-құлықты көріп, құмартып алдыңыз ба?
қосылды автор EtherDragon, көзі
Жауапыңызға рахмет. Мен мұны құмсалғыш арқылы білетіндігіңізді білмеймін, бірақ егер MessageBox кодын OnActivate-да қойсаңыз, ол көрініс көрінбестен бұрын да көрсетіледі. Егер мен оны OverDown OnViewAttached-ға орналастырсам, ол OnViewLoaded-ті жұмыс істеуге мәжбүрлейтін нәрсеге тез арада орындалатын болады. Алайда, егер басқа коды қойсам, көрініс көрінбестен бұрын орындалады.
қосылды автор user1018465, көзі

1 жауаптар

Мүмкін, ең талғампаз шешім емес, бірақ менің ойымша, бұл кодты артынан жасай аласыз, өйткені, қатаң айтқанда, бұл - сіз осында жасауға тырысатын нақты көзқарас. Мысалы, OnInitialized немесе OnRender. Егер сіз өз пікіріңізді EventAggregator-ға сілтеме жасасаңыз, сіз оқиға жасап, көрініс үлгісін жасай аласыз - немесе сіздің қандай да бір сыныпты таңдасаңыз, осы оқиғаны жазыңыз және оны орындаңыз. Немесе MessageBox көрсетілімі жағдайында, шынымен де, View-дегі кез келген орын болмайды.

1
қосылды
OnViewLoaded , OnShown үшін ең жақсы таңдау болып көрінеді
қосылды автор FindOutIslamNow, көзі
Олар мен үшін де жұмыс істемейді. Caliber қондырғысы OnViewAttached маған ұнайтын нәрсеге жақын болып көрінеді, егер бұл жақсы немесе жеткілікті ме, жоқ па, соны көре аламын ба?
қосылды автор user1018465, көзі